jshong0907

group api

1 +import json
2 +import uuid
3 +from django.utils import timezone
4 +from ..aws import s3_delete
5 +from ..models import File, Group, GroupUser, User
6 +
7 +
1 # 그룹 생성 8 # 그룹 생성
2 def create(request): 9 def create(request):
3 - return {'result': True} 10 + # TODO: Auth
11 + request.user_id = 1
12 +
13 + # Load
14 + try:
15 + received = json.loads(request.body.decode('utf-8'))
16 + except json.decoder.JSONDecodeError:
17 + return {'result': False, 'error': '입력이 잘못되었습니다.'}
18 +
19 + # Validate
20 + if 'name' not in received or received['name'] == '':
21 + return {'result': False, 'error': '입력이 누락되었습니다.'}
22 +
23 + # Create
24 + root_folder = uuid.uuid4()
25 + group = Group.objects.create(
26 + owner_id=request.user_id,
27 + name=received['name'],
28 + root_folder=root_folder,
29 + invite_code=uuid.uuid4(),
30 + created_at=timezone.now()
31 + )
32 + GroupUser.objects.create(
33 + group_id=group.id,
34 + user_id=request.user_id,
35 + joined_at=timezone.now()
36 + )
37 + File.objects.create(
38 + id=root_folder,
39 + owner_user_id=request.user_id,
40 + owner_group_id=group.id,
41 + type='folder',
42 + name='group_%s' % group.id,
43 + size=0,
44 + created_at=timezone.now()
45 + )
46 +
47 + return {'result': True, 'group_id': group.id}
4 48
5 49
6 # 그룹 초대장 조회 50 # 그룹 초대장 조회
7 def find_invite(request, invite_code): 51 def find_invite(request, invite_code):
8 - return {'result': True} 52 + # TODO: Auth
53 + request.user_id = 1
54 +
55 + # Query
56 + group = Group.objects.filter(invite_code=invite_code)
57 +
58 + # Check Exists
59 + if len(group) == 0:
60 + return {'result': False, 'error': '존재하지 않는 초대장입니다.'}
61 +
62 + # Structure
63 + data = {
64 + 'id': group[0].id,
65 + 'name': group[0].name
66 + }
67 +
68 + # Check Joined
69 + joined = GroupUser.objects.filter(group_id=group[0].id, user_id=request.user_id)
70 + if len(joined) == 0:
71 + data['joined'] = False
72 + else:
73 + data['joined'] = True
74 +
75 + return {'result': True, 'data': data}
9 76
10 77
11 # 그룹 초대장 사용 78 # 그룹 초대장 사용
12 def use_invite(request, invite_code): 79 def use_invite(request, invite_code):
80 + # TODO: Auth
81 + request.user_id = 1
82 +
83 + # Query
84 + group = Group.objects.filter(invite_code=invite_code)
85 +
86 + # Check Exists
87 + if len(group) == 0:
88 + return {'result': False, 'error': '존재하지 않는 초대장입니다.'}
89 +
90 + # Check Joined
91 + joined = GroupUser.objects.filter(group_id=group[0].id, user_id=request.user_id)
92 + if len(joined) != 0:
93 + return {'result': False, 'error': '이미 가입된 그룹입니다.'}
94 +
95 + # Join
96 + GroupUser.objects.create(
97 + group_id=group[0].id,
98 + user_id=request.user_id,
99 + joined_at=timezone.now()
100 + )
101 +
13 return {'result': True} 102 return {'result': True}
14 103
15 104
16 # 그룹 목록 105 # 그룹 목록
17 def list_me(request): 106 def list_me(request):
18 - return {'result': True} 107 + # TODO: Auth
108 + request.user_id = 1
109 +
110 + # Query
111 + joined = GroupUser.objects.filter(user_id=request.user_id).values_list('group_id', flat=True)
112 + groups = Group.objects.filter(id__in=joined)
113 +
114 + # Structure
115 + data = []
116 + for group in groups:
117 + data.append({
118 + 'id': group.id,
119 + 'name': group.name,
120 + 'root_folder': group.root_folder,
121 + })
122 +
123 + return {'result': True, 'data': data}
19 124
20 125
21 # 그룹 조회 126 # 그룹 조회
22 def find_item(request, group_id): 127 def find_item(request, group_id):
23 - return {'result': True} 128 + # TODO: Auth
129 + request.user_id = 1
130 +
131 + # Check Joined
132 + joined = GroupUser.objects.filter(group_id=group_id, user_id=request.user_id)
133 + if len(joined) == 0:
134 + return {'result': False, 'error': '입력이 잘못되었습니다.'}
135 +
136 + # Query
137 + group = Group.objects.filter(id=group_id)
138 +
139 + # Check Exists
140 + if len(group) == 0:
141 + return {'result': False, 'error': '존재하지 않는 그룹입니다.'}
142 +
143 + # Structure
144 + data = {
145 + 'id': group[0].id,
146 + 'name': group[0].name,
147 + 'root_folder': group[0].root_folder,
148 + }
149 +
150 + # If Owner
151 + if group[0].owner_id == request.user_id:
152 + user_ids = GroupUser.objects.filter(group_id=group_id).values_list('user_id', flat=True)
153 + users = User.objects.filter(id__in=user_ids)
154 + user_data = []
155 + for user in users:
156 + user_data.append({
157 + 'id': user.id,
158 + 'name': user.name,
159 + })
160 + data['user'] = user_data
161 + data['invite_code'] = group[0].invite_code
162 + data['created_at'] = group[0].created_at
163 + data['is_owner'] = True
164 +
165 + return {'result': True, 'data': data}
24 166
25 167
26 # 그룹 수정 168 # 그룹 수정
27 def update_item(request, group_id): 169 def update_item(request, group_id):
170 + # TODO: Auth
171 + request.user_id = 1
172 +
173 + # Load
174 + try:
175 + received = json.loads(request.body.decode('utf-8'))
176 + except json.decoder.JSONDecodeError:
177 + return {'result': False, 'error': '입력이 잘못되었습니다.'}
178 +
179 + # Validate
180 + if 'name' not in received or received['name'] == '':
181 + return {'result': False, 'error': '입력이 누락되었습니다.'}
182 +
183 + # Query
184 + group = Group.objects.filter(id=group_id)
185 +
186 + # Check Exists
187 + if len(group) == 0:
188 + return {'result': False, 'error': '존재하지 않는 그룹입니다.'}
189 +
190 + # Check Owner
191 + if group[0].owner_id != request.user_id:
192 + return {'result': False, 'error': '권한이 없습니다.'}
193 +
194 + # Update
195 + group[0].name = received['name']
196 + group[0].save()
197 +
28 return {'result': True} 198 return {'result': True}
29 199
30 200
31 # 그룹 삭제 201 # 그룹 삭제
32 def delete_item(request, group_id): 202 def delete_item(request, group_id):
203 + # TODO: Auth
204 + request.user_id = 1
205 +
206 + # Query
207 + group = Group.objects.filter(id=group_id)
208 +
209 + # Check Exists
210 + if len(group) == 0:
211 + return {'result': False, 'error': '존재하지 않는 그룹입니다.'}
212 +
213 + # Check Owner
214 + if group[0].owner_id != request.user_id:
215 + return {'result': False, 'error': '권한이 없습니다.'}
216 +
217 + # S3 Delete
218 + del_list = File.objects.filter(owner_group_id=group_id).values_list('id', flat=True)
219 + s3_delete(del_list)
220 +
221 + # Delete
222 + del_list.update(is_trashed=1, deleted_at=timezone.now())
223 + GroupUser.objects.filter(group_id=group_id).delete()
224 + Group.objects.filter(id=group_id).delete()
225 +
33 return {'result': True} 226 return {'result': True}
34 227
35 228
36 # 그룹 사용자 삭제 229 # 그룹 사용자 삭제
37 def remove_user(request, group_id, user_id): 230 def remove_user(request, group_id, user_id):
231 + # TODO: Auth
232 + request.user_id = 1
233 +
234 + # Query
235 + group = Group.objects.filter(id=group_id)
236 +
237 + # Check Owner
238 + if group[0].owner_id != request.user_id:
239 + return {'result': False, 'error': '권한이 없습니다.'}
240 +
241 + # Check Me
242 + if int(user_id) == request.user_id:
243 + return {'result': False, 'error': '본인은 삭제할 수 없습니다.'}
244 +
245 + # Remove
246 + GroupUser.objects.filter(group_id=group_id, user_id=user_id).delete()
247 +
38 return {'result': True} 248 return {'result': True}
......