서승완

feat: implement file, folder create api

1 -# 폴더/파일 목록 1 +import json
2 +import uuid
3 +from django.utils import timezone
4 +from ..aws import sign
5 +from ..models import File, GroupUser
6 +
7 +
8 +# TODO: 폴더/파일 목록
2 def list_item(request): 9 def list_item(request):
3 return {'result': True} 10 return {'result': True}
4 11
5 12
6 # 폴더 생성, 파일 업로드 13 # 폴더 생성, 파일 업로드
7 def create(request): 14 def create(request):
8 - return {'result': True} 15 + # TODO: Auth
16 + request.user_id = 1
17 +
18 + # Load
19 + received = json.loads(request.body.decode('utf-8'))
20 +
21 + # Validate
22 + if 'parent_id' not in received \
23 + or 'type' not in received \
24 + or 'name' not in received:
25 + return {'result': False, 'error': '입력이 누락되었습니다.'}
26 + if (received['type'] != 'folder' and received['type'] != 'file') \
27 + or received['name'] == '':
28 + return {'result': False, 'error': '입력이 잘못되었습니다.'}
29 +
30 + # Get Parent
31 + parent = File.objects.filter(id=received['parent_id'], is_trahsed=0, deleted_at__isnull=True)
32 +
33 + # Check Exists
34 + if len(parent) == 0:
35 + return {'result': False, 'error': '경로가 잘못되었습니다.'}
36 +
37 + # Check Owner
38 + is_auth = False
39 + if parent[0].owner_user_id == request.user_id:
40 + is_auth = True
41 + is_my_group = GroupUser.objects.filter(group_id=parent[0].owner_group_id, user_id=request.user_id)
42 + if len(is_my_group) != 0:
43 + is_auth = True
44 + if is_auth is False:
45 + return {'result': False, 'error': '경로가 잘못되었습니다.'}
46 +
47 + # Insert
48 + file_id = uuid.uuid4()
49 + File.objects.create(
50 + id=file_id,
51 + parent_id=received['parent_id'],
52 + owner_user_id=parent[0].owner_user_id,
53 + owner_group_id=parent[0].owner_group_id,
54 + uploader_id=request.user_id,
55 + type=received['type'],
56 + name=received['name'],
57 + size=0,
58 + created_at=timezone.now()
59 + )
60 +
61 + # Return Folder
62 + if received['type'] == 'folder':
63 + return {'result': True, 'file_id': file_id}
64 +
65 + # Return File
66 + upload_url = 'https://khubox-files.khunet.net/%s' % file_id
67 + upload_url = sign(upload_url)
68 + return {'result': True, 'file_id': file_id, 'upload_url': upload_url}
9 69
10 70
11 -# 휴지통 비우기 71 +# TODO: 휴지통 비우기
12 def empty_trash(request): 72 def empty_trash(request):
13 return {'result': True} 73 return {'result': True}
14 74
15 75
16 -# 폴더/파일 조회, 파일 다운로드 76 +# TODO: 폴더/파일 조회, 파일 다운로드
17 def find_item(request, file_id): 77 def find_item(request, file_id):
18 return {'result': True} 78 return {'result': True}
19 79
20 80
21 -# 폴더/파일 수정 81 +# TODO: 폴더/파일 수정
22 def update_item(request, file_id): 82 def update_item(request, file_id):
23 return {'result': True} 83 return {'result': True}
24 84
25 85
26 -# 파일 복제 86 +# TODO: 파일 복제
27 def copy(request, file_id): 87 def copy(request, file_id):
28 return {'result': True} 88 return {'result': True}
......