-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathroom_impl.go
More file actions
110 lines (96 loc) · 3.06 KB
/
room_impl.go
File metadata and controls
110 lines (96 loc) · 3.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package service
import (
"context"
"time"
"github.com/gofrs/uuid"
"github.com/traPtitech/knoQ/domain"
)
func (s *service) CreateUnVerifiedRoom(ctx context.Context, reqID uuid.UUID, params domain.WriteRoomParams) (*domain.Room, error) {
// 時間整合性の確認
if(!params.TimeStart.Before(params.TimeEnd)){
return nil,ErrTimeConsistency
}
p := domain.CreateRoomArgs{
WriteRoomParams: params,
Verified: false,
CreatedBy: reqID,
}
r, err := s.GormRepo.CreateRoom(p)
return r, defaultErrorHandling(err)
}
func (s *service) CreateVerifiedRoom(ctx context.Context, reqID uuid.UUID, params domain.WriteRoomParams) (*domain.Room, error) {
if !s.IsPrivilege(ctx, reqID) {
return nil, domain.ErrForbidden
}
// 時間整合性の確認
if(!params.TimeStart.Before(params.TimeEnd)){
return nil,ErrTimeConsistency
}
p := domain.CreateRoomArgs{
WriteRoomParams: params,
Verified: true,
CreatedBy: reqID,
}
r, err := s.GormRepo.CreateRoom(p)
return r, defaultErrorHandling(err)
}
func (s *service) UpdateRoom(ctx context.Context, reqID uuid.UUID, roomID uuid.UUID, params domain.WriteRoomParams) (*domain.Room, error) {
if !s.IsRoomAdmins(ctx, reqID, roomID) {
return nil, domain.ErrForbidden
}
// そもそもNilだとIsRoomAdminsで弾かれるはず
// if roomID == uuid.Nil {
// return nil,ErrRoomUndefined
// }
p := domain.UpdateRoomArgs{
WriteRoomParams: params,
CreatedBy: reqID,
}
// 時間整合性の確認
if(!params.TimeStart.Before(params.TimeEnd)){
return nil,ErrTimeConsistency
}
r, err := s.GormRepo.UpdateRoom(roomID, p)
return r, defaultErrorHandling(err)
}
func (s *service) VerifyRoom(ctx context.Context, reqID uuid.UUID, roomID uuid.UUID) error {
if !s.IsPrivilege(ctx, reqID) {
return domain.ErrForbidden
}
err := s.GormRepo.UpdateRoomVerified(roomID, true)
return defaultErrorHandling(err)
}
func (s *service) UnVerifyRoom(ctx context.Context, reqID uuid.UUID, roomID uuid.UUID) error {
if !s.IsPrivilege(ctx, reqID) {
return domain.ErrForbidden
}
err := s.GormRepo.UpdateRoomVerified(roomID, false)
return defaultErrorHandling(err)
}
func (s *service) DeleteRoom(ctx context.Context, reqID uuid.UUID, roomID uuid.UUID) error {
if !s.IsRoomAdmins(ctx, reqID, roomID) {
return domain.ErrForbidden
}
err := s.GormRepo.DeleteRoom(roomID)
return defaultErrorHandling(err)
}
func (s *service) GetRoom(ctx context.Context, roomID uuid.UUID, excludeEventID uuid.UUID) (*domain.Room, error) {
rs, err := s.GormRepo.GetRoom(roomID, excludeEventID)
return rs, defaultErrorHandling(err)
}
func (s *service) GetAllRooms(ctx context.Context, start time.Time, end time.Time, excludeEventID uuid.UUID) ([]*domain.Room, error) {
rs, err := s.GormRepo.GetAllRooms(start, end, excludeEventID)
return rs, defaultErrorHandling(err)
}
func (s *service) IsRoomAdmins(ctx context.Context, reqID uuid.UUID, roomID uuid.UUID) bool {
room, err := s.GetRoom(ctx, roomID, uuid.Nil)
if err != nil {
return false
}
for _, admin := range room.Admins {
if reqID == admin.ID {
return true
}
}
return false
}