@@ -9,10 +9,11 @@ import (
99
1010type ProjectService struct {
1111 ProjectRepo * repository.ProjectRepo
12+ UserRepo * repository.UserRepository
1213}
1314
14- func NewProjectService (projectRepo * repository.ProjectRepo ) * ProjectService {
15- return & ProjectService {ProjectRepo : projectRepo }
15+ func NewProjectService (project * repository.ProjectRepo , user * repository. UserRepository ) * ProjectService {
16+ return & ProjectService {ProjectRepo : project , UserRepo : user }
1617}
1718
1819type CreateInput struct {
@@ -21,6 +22,11 @@ type CreateInput struct {
2122 AdminID uint `json:"admin_id"`
2223}
2324
25+ type InviteProjectInput struct {
26+ Email string `json:"email"`
27+ Role string `json:"role"`
28+ }
29+
2430func (ps * ProjectService ) CreateProject (input * CreateInput ) (* domain.Project , error ) {
2531 projectInfo := domain.Project {
2632 Name : input .Name ,
@@ -53,3 +59,45 @@ func (ps *ProjectService) GetProjectById(id string) (*domain.Project, error) {
5359 }
5460 return project , nil
5561}
62+
63+ func (ps * ProjectService ) InviteProject (input * InviteProjectInput , Role string , userID uint , projectID uint ) (* domain.ProjectUser , error ) {
64+ if Role != "admin" {
65+ prorole , err := ps .ProjectRepo .ProjectUserCheck (userID )
66+ if err != nil {
67+ return nil , errors .New ("user is not part of project" )
68+ }
69+ if prorole .Role != "lead" {
70+ return nil , errors .New ("permission denied" )
71+ }
72+ }
73+ user , err := ps .UserRepo .FindByEmail (input .Email )
74+ if err != nil {
75+ return nil , err
76+ }
77+ var inviteInfo = domain.ProjectUser {
78+ ProjectID : projectID ,
79+ UserID : user .ID ,
80+ Role : input .Role ,
81+ }
82+ project , err := ps .ProjectRepo .InviteProject (& inviteInfo )
83+ if err != nil {
84+ return nil , err
85+ }
86+ return project , nil
87+ }
88+
89+ func (ps * ProjectService ) DeleteProjectUser (id uint , Role string , userID uint ) error {
90+ if Role != "admin" {
91+ prorole , err := ps .ProjectRepo .ProjectUserCheck (userID )
92+ if err != nil {
93+ return errors .New ("user is not part of project" )
94+ }
95+ if prorole .Role != "lead" {
96+ return errors .New ("permission denied" )
97+ }
98+ }
99+ if err := ps .ProjectRepo .RemoveProjectUser (id ); err != nil {
100+ return err
101+ }
102+ return nil
103+ }
0 commit comments