swsnu / swpp2020-team2

0 stars 1 forks source link

[backend] API opinions #41

Open ariadne240 opened 3 years ago

ariadne240 commented 3 years ago

All APIs should contain "/api" in front.

Model API GET POST PUT DELETE
User /signup X Create new user X X
Input Json {username: 'ray017', first_name: 'Raegeon', last_name: 'Lee', password: 'password', email: 'cbda117@snu.ac.kr', university: 1, department: 1}
Output Json No Json
/signup/activate/:uidb64/:token Activate user account X X X
Input Json No Json
Output Json No Json
/signin X Log in X X
Input Json {username: 'ray017', password: 'password'}
Output Json {id: 1, username: 'ray017', first_name: 'Raegeon', last_name: 'Lee', password: 'HashedNonce', email: 'cbda117@snu.ac.kr', is_active: True, university: 1, department: 1}
/signout Log out X X X
Input Json No Json
Output Json No Json
Model API GET POST PUT DELETE
/user/signin Get logged in user X X X
Input Json No Json
Output Json {id: 1, username: 'ray017', first_name: 'Raegeon', last_name: 'Lee', password: 'HashedNonce', email: 'cbda117@snu.ac.kr', is_active: True, university: 1, department: 1}
/user/signin/full Get full info about logged in user X X X
Input Json No Json
Output Json {id: 1, username: 'ray017', first_name: 'Raegeon', last_name: 'Lee', password: 'HashedNonce', email: 'cbda117@snu.ac.kr', is_active: True, university: 1, department: 1, profile: 1, background: 1, language: 1, likes: [1, 2], brings: [1], join_requests:[], likes_group: [], gets_notification: [1], members: [1, 2], admins: [1], kings: [1]}
/user/:user_id Get specific user X X X
Input Json No Json
Output Json {id: 1, username: 'ray017', first_name: 'Raegeon', last_name: 'Lee', password: 'HashedNonce', email: 'cbda117@snu.ac.kr', is_active: True, university: 1, department: 1}
/user/:user_id/full Get full info about specific user X X X
Input Json No Json
Output Json {id: 1, username: 'ray017', first_name: 'Raegeon', last_name: 'Lee', password: 'HashedNonce', email: 'cbda117@snu.ac.kr', is_active: True, university: 1, department: 1, profile: 1, background: 1, language: 1, likes: [1, 2], brings: [1], join_requests:[], likes_group: [], gets_notification: [1], members: [1, 2], admins: [1], kings: [1]}
/user/signin/like_event X X Like/Unlike specific event X
Input Json {event: 1, operation: 'add'}
Output Json No Json
/user/signin/bring_event X X Bring/Unbring specific event X
Input Json {event: 1, operation: 'add'}
Output Json No Json
/user/signin/like_group X X Like/Unlike specific group X
Input Json {group: 1, operation: 'remove'}
Output Json No Json
/user/signin/get_notification X X Get/Unget notification of specific group X
Input Json {group: 1, operation: 'add'}
Output Json No Json
/user/signin/join_request X X Add/Delete join request to specific group X
Input Json {group: 1, operation: 'remove'}
Output Json No Json
/user/signin/change_password X X Change password of specific user X
Input Json {password: 'password2'}
Output Json No Json
/user/signin/change_profile X X Change profile of specific user X
Input Json {profile: 1}
Output Json No Json
/user/signin/change_background X X Change background color of specific user X
Input Json {background: 1}
Output Json No Json
/user/signin/change_language X X Change language of specific user X
Input Json {language: 1}
Output Json No Json
Model API GET POST PUT DELETE
Category /category Get all categories Create new category X X
Input Json No Json {name: 'performance'}
Output Json list of {id: 1, name: 'performance'} {id: 1, name: 'performance'}
/category/:category_id Get specific category X X Delete specific category
Input Json No Json No Json
Output Json {id: 1, name: 'performance'} No Json
/category/name/:name Get specific category by name X X X
Input Json No Json
Output Json {id: 1, name: 'performance'}
Tag /tag Get all tags Create new tag X X
Input Json No Json {name: 'waffle'}
Output Json list of {id: 1, name: 'waffle'} {id: 1, name: 'waffle'}
/tag/:tag_id Get specific tag X X Delete specific tag
Input Json No Json No Json
Output Json {id: 1, name: 'waffle'} No Json
/tag/name/:name Get specific tag by name X X X
Input Json No Json
Output Json {id: 1, name: 'waffle'}
/tag/recommend X Get recommendation about tags X X
Input Json {content: 'Welcome to our event.'}
Output Json list of {id: 1}
Model API GET POST PUT DELETE
Department /department Get all departments Create new department X X
Input Json No Json {name: 'Computer Science Engineering'}
Output Json list of {id: 1, name: 'Computer Science Engineering'} {id: 1, name: 'Computer Science Engineering'}
/department/:department_id Get specific department X X Delete specific department
Input Json No Json No Json
Output Json {id: 1, name: 'Computer Science Engineering'} No Json
/department/name/:name Get department by name X X X
Input Json No Json
Output Json {id: 1, name: 'Computer Science Engineering'}
University /university Get all universities Create new university X X
Input Json No Json {name: 'Seoul National University', domain: 'snu.ac.kr'}
Output Json list of {id: 1, name: 'Seoul National University', domain: 'snu.ac.kr'} {id: 1, name: 'Seoul National University', domain: 'snu.ac.kr'}
/university/:university_id Get specific university X X Delete specific university
Input Json No Json No Json
Output Json {id: 1, name: 'Seoul National University', domain: 'snu.ac.kr'} No Json
/university/name/:name Get university by name X X X
Input Json No Json
Output Json {id: 1, name: 'Seoul National University', domain: 'snu.ac.kr'}
Background /background Get list of all backgrounds Create new background X X
Input Json No Json {name: 'green'}
Output Json list of {id: 1, name: 'green'} {id: 1, name: 'green'}
/background/:background_id Get specific background X X Delete specific background
Input Json No Json No Json
Output Json {id: 1, name: 'green'} No Json
Language /language Get list of all languages Create new language X X
Input Json No Json {name: 'English'}
Output Json list of {id: 1, name: 'English'} {id: 1, name: 'English'}
/language/:language_id Get specific language X X Delete specific language
Input Json No Json No Json
Output Json {id: 1, name: 'English'} No Json
Image /image Get all images Create new image X X
Input Json No Json No Json
Output Json list of {id: 1, name: '/image/anyimageurl.jpg'} {id: 1, name: '/image/anyimageurl.jpg'}
/image/:image_id Get specific image X X Delete specific image
Input Json No Json No Json
Output Json {id: 1, name: '/image/anyimageurl.jpg'} No Json
Model API GET POST PUT DELETE
Event /event Get list of all events X X X
Input Json No Json
Output Json list of {id: 1, title: 'Event Title', place: 'Event Place', date: '2020-11-05', category: 1, tag: [1, 2], group: 1, begin_time: '14:20:00', end_time: '16:40:00', last_editor: 1, image: [], content: 'Event Content', likes: [1], brings: [1]}
/event/simple Get list of simple info of all events X X X
Input Json No Json
Output Json list of {id: 1, title: 'Event Title', date: '2020-11-05', category: 1, group: 1, begin_time: '14:20:00', end_time: '16:40:00'}
/event/filtered X Get list of events filtered by requests X X
Input Json {filter_options: {including: ['Waffle'], tag: [1, 3], category: [1, 4], group: ['like', 'my'], event: ['like'], date: {begin_date: '2020-11-05', end_date: '2020-11-06'}}, sort_options: ['date'], count_options: {from: 20, num: 10}}
Output Json list of {id: 1, title: 'Event Title', date: '2020-11-05', category: 1, group: 1, begin_time: '14:20:00', end_time: '16:40:00'}
/event/create X Create new event X X
Input Json {title: 'Event Title', place: 'Event Place', date: '2020-11-05', category: 1, tag: [1, 2], group: 1, begin_time: '14:20:00', end_time: '16:40:00', last_editor: 1, image: [], content: 'Event Content'}
Output Json {id: 1, title: 'Event Title', place: 'Event Place', date: '2020-11-05', category: 1, tag: [1, 2], group: 1, begin_time: '14:20:00', end_time: '16:40:00', last_editor: 1, image: [], content: 'Event Content', likes: [], brings: []}
/event/:event_id/full Get specific event X Edit specific event Delete specific event
Input Json No Json {title: 'Event Title', place: 'Event Place', date: '2020-11-05', category: 1, tag: [1, 2], group: 1, begin_time: '14:20:00', end_time: '16:40:00', last_editor: 1, image: [], content: 'Event Content'} No Json
Output Json {id: 1, title: 'Event Title', place: 'Event Place', date: '2020-11-05', category: 1, tag: [1, 2], group: 1, begin_time: '14:20:00', end_time: '16:40:00', last_editor: 1, image: [], content: 'Event Content', likes: [1], brings: [1]} {id: 1, title: 'Event Title', place: 'Event Place', date: '2020-11-05', category: 1, tag: [1, 2], group: 1, begin_time: '14:20:00', end_time: '16:40:00', last_editor: 1, image: [], content: 'Event Content', likes: [1], brings: [1]} No Json
/event/:event_id Get simplified info about specific event X X X
Input Json No Json
Output Json {id: 1, title: 'Event Title', date: '2020-11-05', category: 1, group: 1, begin_time: '14:20:00', end_time: '16:40:00'}
/event/recommend X Get recommendation about events X X
Input Json {num: 1}
Output Json list of {id: 1}
Model API GET POST PUT DELETE
Group /group Get list of all groups X X X
Input Json No Json
Output Json list of {id: 1, name: 'Group Name', member: [1, 2], admin: [1], king: 1, likes_group: [1, 2], gets_notification: [1], join_requests: [3], profile: 1, description: 'Group Description', privacy: 1}
/group/simple Get list of simple info of all groups X X X
Input Json No Json
Output Json list of {id: 1, name: 'Group Name', king: 1, description: 'Group Description', privacy: 1}
/group/filtered X Get list of groups filtered by requests X X
Input Json {filter_options: {including: ['Waffle'], group: ['like', 'my']}, sort_options: ['likes'], count_options: {from: 20, num: 10}}
Output Json list of {id: 1, name: 'Group Name', king: 1, description: 'Group Description', privacy: 1}
/group/create X Create new group X X
Input Json {name: 'Group Name', king: 1, description: 'Group Description'}
Output Json {id: 1, name: 'Group Name', king: 1, description: 'Group Description', privacy: 1}
/group/:group_id/full Get specific group X X Delete specific group
Input Json No Json No Json
Output Json {id: 1, name: 'Group Name', member: [1, 2], admin: [1], king: 1, likes_group: [1, 2], gets_notification: [1], join_requests: [3], profile: 1, description: 'Group Description', privacy: 1} No Json
/group/:group_id Get simplified info about specific group X X X
Input Json No Json
Output Json {id: 1, name: 'Group Name', king: 1, description: 'Group Description', privacy: 1}
/group/:group_id/member X X Add/Expel member X
Input Json {user: 1, operation: 'add'}
Output Json No Json
/group/:group_id/admin X X Authorize/De-authorize administrator X
Input Json {user: 1, operation: 'remove'}
Output Json No Json
/group/:group_id/king X X Change king to specific user X
Input Json {user: 1}
Output Json No Json
/group/:group_id/change_profile X X Change profile image X
Input Json {profile: 1}
Output Json No Json
/group/:group_id/change_privacy X X Change privacy X
Input Json {privacy: 1}
Output Json No Json
/group/search/:including Search group with query X X X
Input Json No Json
Output Json list of {id: 1, name: 'Group Name', profile: 1, description: 'Group Description'}
Model API GET POST PUT DELETE
Event_report /event_report Get list of all event reports Create new event report X X
Input Json No Json {event: 1, content: 'Spam'}
Output Json list of {id: 1, event: 1, reporter: 1, content: 'Spam'} {id: 1, event: 1, reporter: 1, content: 'Spam'}
/event_report/:event_report_id Get specific event report X X Delete specific event report
Input Json No Json No Json
Output Json {id: 1, event: 1, reporter: 1, content: 'Spam'} No Json
/event_report/event/:event_id Get list of event reports by event X X X
Input Json No Json
Output Json list of {id: 1, event: 1, reporter: 1, content: 'Spam'}
Group_report /group_report Get list of all group reports Create new group report X X
Input Json No Json {group: 1, content: 'Inappropriate'}
Output Json list of {id: 1, group: 1, reporter: 1, content: 'Inappropriate'} {id: 1, group: 1, reporter: 1, content: 'Inappropriate'}
/group_report/:group_report_id Get specific group report X X Delete specific group report
Input Json No Json No Json
Output Json {id: 1, group: 1, reporter: 1, content: 'Inappropriate'} No Json
/group_report/group/:group_id Get list of group reports by group X X X
Input Json No Json
Output Json list of {id: 1, group: 1, reporter: 1, content: 'Inappropriate'}
ray017 commented 3 years ago

I think we need api to search group. API: /group/search/:search_query input JSON: none output JSON: list of {name:'Group Name', imageID:1, description:'Group Description'}

maybe like this?

ray017 commented 3 years ago

And we need to fix some parameters for images. need image id instead of url at user APIs (we won't need them for /signup and /signin, but for /user/...) and need image id at group info.

ariadne240 commented 3 years ago

That will be reflected soon hopefully.

ariadne240 commented 3 years ago

The 'parameters of image' part is resolved.

ariadne240 commented 3 years ago

cf) There should be only one option in sort_options when GETting filtered events.

ariadne240 commented 3 years ago

I will try to implement this API: API: /group/search/:including Input JSON: No Json Output JSON: list of {id: 1, name: 'Group Name', profile: 1, description: 'Group Description'}

sdm1230 commented 3 years ago

Frontend API 수정사항 요청 - event (get)요청 시

group: id 말고 group: {id, name} category: id 말고 category: { id, name} last_editor: id 말고 last_editor: { id, name, department }

으로 수정 바랍니다.

sdm1230 commented 3 years ago

tag : id말고 [ {id, name} ] 으로 바꿔주세요 !

ray017 commented 3 years ago

need id and name for department and university at '/user/signin' and '/user/siginin/full'

ariadne240 commented 3 years ago

@ray017 I changed from university (or department): id to university: { id, name }. It is applied for four APIs, /user/signin, /user/signin/full, /user/<user_id>, /user/<user_id>/full

ariadne240 commented 3 years ago

Notice: The PUT API /user/signin/change_password should have this Input Json: X {password: 'password2'} O {old_password: 'old_password', password: 'password2'}

ariadne240 commented 3 years ago

Notice (for @ray017) new API /user/signin/change_info (PUT) Input JSON: {first_name: 'Harry', last_name: 'Potter', department: 1} Output JSON: X

sdm1230 commented 3 years ago

get_event_filtered 요청시

group: id 말고 group: {id, name} category: id 말고 category: { id, name} last_editor: id 말고 last_editor: { id, name, department }

으로 수정 바랍니다.

ariadne240 commented 3 years ago

@sdm1230 I handled this.