# Session types ## Option 1 > Collection sessions ``` { sessionId: Number, sessionTypeIds: Number[] } ``` > Collection sessionsTypes ``` { sessionTypeId: Number, name: String, sessionTtl: Number } ``` | id | name | | -- | ---- | | 0 | chat | | 1 | call | | 2 | notification | | 3 | internal | | 4 | external | | 5 | public channel | | 6 | private channel | | 7 | group channel | > direct internal session => 0 + 3 > group session => 0 + 3 + 7 > private channel => 0 + 3 + 6 > public channel => 0 + 3 + 5 > universal channel => 0 + 3 + 4 + 6 > external session => 0 + 4 DB ``` // GET all internal session db.sessions.find({ sessionTypes: 3 }) // GET all channels db.sessions.find({ sessionTypes: { $in: [ 5, 6] } }) // GET universal channels db.sessions.find({ sessionTypes: { $all: [ 0, 3, 4, 6], $size: 4 } }) // GET group sessions db.sessions.find({ sessionTypes: { $all: [0,3,7], $size: 3 }, }) // GET direct sessions (group, self, one to one) db.sessions.find({ $or: [ { sessionTypes.0: { $all: [0,3], $size: 2} }, { sessionTypes.0: { $all: [0,3,7], $size: 3} }, ] }) // GET external sessions db.sessions.find({ sessionTypes.0: { $all: [0,4], $size: 2}, }) ``` ### Option 2 > Collection sessions ``` { sessionId: Number, sessionTypeId: Number, } ``` > Collection sessionTypes ``` { sessionTypeId: Number, canBeConvertedToIds: Number[], systemReference: String, sessionTtl: Number } ``` | id | name | canBeConvertedToIds(childSessionTypeIds) | | -- | --------------------- | ------------------- | | 0 | direct sesison | [] | | 1 | group session | [] | | 2 | private channel | [7,3] | | 3 | public channel | [2] | | 4 | external session | [] | | 5 | call external | [] | | 6 | notification | [] | | 7 | universal session | [] | API ``` > return only direct sessions GET /sessions?sessionTypeIds=0 > return only direct sessions and group session GET /sessions?sessionTypeIds=0,1 ``` DB ``` > return only direct sessions db.sessions.find({ sessionTypeId: 0 }) > return only direct sessions and group session db.sessions.find({ sessionTypeId: { $in: [0,1] } }) ```