| 
									
										
										
										
											2015-02-23 20:07:49 +01:00
										 |  |  | package models | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"errors" | 
					
						
							|  |  |  | 	"time" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Typed errors | 
					
						
							|  |  |  | var ( | 
					
						
							|  |  |  | 	ErrInvalidRoleType = errors.New("Invalid role type") | 
					
						
							|  |  |  | 	ErrLastOrgAdmin    = errors.New("Cannot remove last organization admin") | 
					
						
							| 
									
										
										
										
											2015-05-01 09:48:07 +02:00
										 |  |  | 	ErrOrgUserNotFound = errors.New("Cannot find the organization user") | 
					
						
							| 
									
										
										
										
											2015-02-23 20:07:49 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type RoleType string | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const ( | 
					
						
							| 
									
										
										
										
											2015-06-01 17:01:04 +02:00
										 |  |  | 	ROLE_VIEWER           RoleType = "Viewer" | 
					
						
							|  |  |  | 	ROLE_EDITOR           RoleType = "Editor" | 
					
						
							|  |  |  | 	ROLE_READ_ONLY_EDITOR RoleType = "Read Only Editor" | 
					
						
							|  |  |  | 	ROLE_ADMIN            RoleType = "Admin" | 
					
						
							| 
									
										
										
										
											2015-02-23 20:07:49 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (r RoleType) IsValid() bool { | 
					
						
							| 
									
										
										
										
											2015-06-01 17:01:04 +02:00
										 |  |  | 	return r == ROLE_VIEWER || r == ROLE_ADMIN || r == ROLE_EDITOR || r == ROLE_READ_ONLY_EDITOR | 
					
						
							| 
									
										
										
										
											2015-02-23 20:07:49 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type OrgUser struct { | 
					
						
							| 
									
										
										
										
											2015-05-01 09:48:07 +02:00
										 |  |  | 	Id      int64 | 
					
						
							| 
									
										
										
										
											2015-02-23 20:07:49 +01:00
										 |  |  | 	OrgId   int64 | 
					
						
							|  |  |  | 	UserId  int64 | 
					
						
							|  |  |  | 	Role    RoleType | 
					
						
							|  |  |  | 	Created time.Time | 
					
						
							|  |  |  | 	Updated time.Time | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // --------------------- | 
					
						
							|  |  |  | // COMMANDS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type RemoveOrgUserCommand struct { | 
					
						
							|  |  |  | 	UserId int64 | 
					
						
							|  |  |  | 	OrgId  int64 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type AddOrgUserCommand struct { | 
					
						
							|  |  |  | 	LoginOrEmail string   `json:"loginOrEmail" binding:"Required"` | 
					
						
							|  |  |  | 	Role         RoleType `json:"role" binding:"Required"` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	OrgId  int64 `json:"-"` | 
					
						
							|  |  |  | 	UserId int64 `json:"-"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-01 09:48:07 +02:00
										 |  |  | type UpdateOrgUserCommand struct { | 
					
						
							|  |  |  | 	Role RoleType `json:"role" binding:"Required"` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	OrgId  int64 `json:"-"` | 
					
						
							|  |  |  | 	UserId int64 `json:"-"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 20:07:49 +01:00
										 |  |  | // ---------------------- | 
					
						
							|  |  |  | // QUERIES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetOrgUsersQuery struct { | 
					
						
							|  |  |  | 	OrgId  int64 | 
					
						
							|  |  |  | 	Result []*OrgUserDTO | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ---------------------- | 
					
						
							|  |  |  | // Projections and DTOs | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type OrgUserDTO struct { | 
					
						
							|  |  |  | 	OrgId  int64  `json:"orgId"` | 
					
						
							|  |  |  | 	UserId int64  `json:"userId"` | 
					
						
							|  |  |  | 	Email  string `json:"email"` | 
					
						
							|  |  |  | 	Login  string `json:"login"` | 
					
						
							|  |  |  | 	Role   string `json:"role"` | 
					
						
							|  |  |  | } |