package info import ( "labix.org/v2/mgo/bson" "time" ) // 共享笔记本 /* { userId, 谁的共享笔记本 shared: { userId1: { // 哪个用户共享的 seq: "defaultNotebook": {noteId:{Seq:33}, noteId2:{}} // 默认笔记本, 里面是全部的笔记 "notebookIds":{notebookId:{}, notebookId2:{}}} // 其它笔记本 }, userId2: { } } } */ // 以后可能含有其它信息 type EachSharedNote struct { Seq int } type EachSharedNotebook struct { Seq int } // 每一个用户共享给的note, notebook type EachSharedNotebookAndNotes struct { Seq int // 共享给谁的所在序号 DefaultNotebook map[string]EachSharedNote // noteId => 共享的note Notebooks map[string]EachSharedNotebook // notebookId => 共享的notebook } type SharedNotebookAndNotes struct { UserId bson.ObjectId `bson:"_id"` Shared map[string]EachSharedNotebookAndNotes // userId => } /* { UserId Notes: {noteId => [userId1, userId2], noteId2: []} Notebooks: {notebookId => [], notebookId2 => []} } */ // 用户正在共享的notebook, note type SharingNotebookAndNotes struct { UserId bson.ObjectId `bson:"_id"` Notes map[string][]string // noteId => []string{userId1, userId2} Notebooks map[string][]string // notebookId => []string{userId1, userId2} } // 以上以后再用, 现不用 //---------------------------------------- /* 每一个sharing一条记录, 这样更好操作 类似Notebook的 { _id userId toUserId noteId notebookId seq } */ type ShareNotebook struct { ShareNotebookId bson.ObjectId `bson:"_id,omitempty"` // 必须要设置bson:"_id" 不然mgo不会认为是主键 UserId bson.ObjectId `bson:"UserId"` ToUserId bson.ObjectId `bson:"ToUserId"` NotebookId bson.ObjectId `bson:"NotebookId"` Seq int `bson:"Seq"` // 排序 Perm int `bson:"Perm"` // 权限, 其下所有notes 0只读, 1可修改 CreatedTime time.Time `CreatedTime,omitempty` // IsDefault bool `IsDefault` // 是否是默认共享notebook, perm seq=-9999999, NotebookId=null } /* [ ShareNotebooks, Subs: [ShareNotebooks, ] ShareNotebooks ] */ type SubShareNotebooks []ShareNotebooks type ShareNotebooks struct { Notebook ShareNotebook Subs SubShareNotebooks // Notebook与ShareNotebook公用的不能生成json Seq int NotebookId bson.ObjectId IsDefault bool // 是否是默认笔记本 } // SubShareNotebook sort func (this SubShareNotebooks) Len() int { return len(this) } func (this SubShareNotebooks) Less(i, j int) bool { return this[i].ShareNotebook.Seq < this[j].ShareNotebook.Seq } func (this SubShareNotebooks) Swap(i, j int) { this[i], this[j] = this[j], this[i] } // 以用户进行分组 // type ShareNotebooksByUsers []ShareNotebooksByUser type ShareNotebooksByUser map[string][]ShareNotebooks /* type ShareNotebooksByUser struct { // User UserId bson.ObjectId ShareNotebooks []ShareNotebooks // SubShareNotebooks 一样的, 不过用[]更容易理解 } */ //---------------------------------- // 唯一: userId-ToUserId-NoteId // use leanote // db.leanote.share_notes.ensureIndex({"UserId":1,"ToUserId":1, "NoteId": 1},{"unique":true}) type ShareNote struct { ShareNoteId bson.ObjectId `bson:"_id,omitempty"` // 必须要设置bson:"_id" 不然mgo不会认为是主键 UserId bson.ObjectId `bson:"UserId"` ToUserId bson.ObjectId `bson:"ToUserId"` NoteId bson.ObjectId `bson:"NoteId"` Perm int `bson:"Perm"` // 权限, 0只读, 1可修改 CreatedTime time.Time `CreatedTime` } // 谁共享给了谁note // 共享了note, notebook都要加! // 唯一: UserId-ToUserId // db.leanote.has_share_notes.ensureIndex({"UserId":1,"ToUserId":1},{"unique":true}) type HasShareNote struct { HasShareNotebookId bson.ObjectId `bson:"_id,omitempty"` // 必须要设置bson:"_id" 不然mgo不会认为是主键 UserId bson.ObjectId `bson:"UserId"` ToUserId bson.ObjectId `bson:"ToUserId"` Seq int `bson:"Seq"` // 以后还可以用户排序 } // 将note与权限结合起来 type ShareNoteWithPerm struct { Note Perm int } // 查看共享状态, 用户的信息 type ShareUserInfo struct { ToUserId bson.ObjectId `bson:"UserId"` Email string Perm int // note或其notebook的权限 NotebookHasShared bool // 是否其notebook共享了 }