openapi: 3.0.3 info: title: StudE API version: 1.0.0 description: A Capstone project paths: /api/v1/accounts/jwt/create/: post: operationId: api_v1_accounts_jwt_create_create description: |- Takes a set of user credentials and returns an access and refresh JSON web token pair to prove the authentication of those credentials. tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/TokenObtainPair' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/TokenObtainPair' multipart/form-data: schema: $ref: '#/components/schemas/TokenObtainPair' required: true responses: '200': content: application/json: schema: $ref: '#/components/schemas/TokenObtainPair' description: '' /api/v1/accounts/jwt/refresh/: post: operationId: api_v1_accounts_jwt_refresh_create description: |- Takes a refresh type JSON web token and returns an access type JSON web token if the refresh token is valid. tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/TokenRefresh' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/TokenRefresh' multipart/form-data: schema: $ref: '#/components/schemas/TokenRefresh' required: true responses: '200': content: application/json: schema: $ref: '#/components/schemas/TokenRefresh' description: '' /api/v1/accounts/jwt/verify/: post: operationId: api_v1_accounts_jwt_verify_create description: |- Takes a token and indicates if it is valid. This view provides no information about a token's fitness for a particular use. tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/TokenVerify' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/TokenVerify' multipart/form-data: schema: $ref: '#/components/schemas/TokenVerify' required: true responses: '200': content: application/json: schema: $ref: '#/components/schemas/TokenVerify' description: '' /api/v1/accounts/users/: get: operationId: api_v1_accounts_users_list tags: - api security: - jwtAuth: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/CustomUser' description: '' post: operationId: api_v1_accounts_users_create tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/UserRegistration' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/UserRegistration' multipart/form-data: schema: $ref: '#/components/schemas/UserRegistration' required: true security: - jwtAuth: [] - {} responses: '201': content: application/json: schema: $ref: '#/components/schemas/UserRegistration' description: '' /api/v1/accounts/users/{id}/: get: operationId: api_v1_accounts_users_retrieve parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this user. required: true tags: - api security: - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/CustomUser' description: '' put: operationId: api_v1_accounts_users_update parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this user. required: true tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/CustomUser' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/CustomUser' multipart/form-data: schema: $ref: '#/components/schemas/CustomUser' required: true security: - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/CustomUser' description: '' patch: operationId: api_v1_accounts_users_partial_update parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this user. required: true tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedCustomUser' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedCustomUser' multipart/form-data: schema: $ref: '#/components/schemas/PatchedCustomUser' security: - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/CustomUser' description: '' delete: operationId: api_v1_accounts_users_destroy parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this user. required: true tags: - api security: - jwtAuth: [] responses: '204': description: No response body /api/v1/accounts/users/activation/: post: operationId: api_v1_accounts_users_activation_create tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/Activation' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Activation' multipart/form-data: schema: $ref: '#/components/schemas/Activation' required: true security: - jwtAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/Activation' description: '' /api/v1/accounts/users/me/: get: operationId: api_v1_accounts_users_me_retrieve tags: - api security: - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/CustomUser' description: '' put: operationId: api_v1_accounts_users_me_update tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/CustomUser' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/CustomUser' multipart/form-data: schema: $ref: '#/components/schemas/CustomUser' required: true security: - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/CustomUser' description: '' patch: operationId: api_v1_accounts_users_me_partial_update tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedCustomUser' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedCustomUser' multipart/form-data: schema: $ref: '#/components/schemas/PatchedCustomUser' security: - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/CustomUser' description: '' delete: operationId: api_v1_accounts_users_me_destroy tags: - api security: - jwtAuth: [] responses: '204': description: No response body /api/v1/accounts/users/resend_activation/: post: operationId: api_v1_accounts_users_resend_activation_create tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/SendEmailReset' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/SendEmailReset' multipart/form-data: schema: $ref: '#/components/schemas/SendEmailReset' required: true security: - jwtAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/SendEmailReset' description: '' /api/v1/accounts/users/reset_password/: post: operationId: api_v1_accounts_users_reset_password_create tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/SendEmailReset' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/SendEmailReset' multipart/form-data: schema: $ref: '#/components/schemas/SendEmailReset' required: true security: - jwtAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/SendEmailReset' description: '' /api/v1/accounts/users/reset_password_confirm/: post: operationId: api_v1_accounts_users_reset_password_confirm_create tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/PasswordResetConfirm' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PasswordResetConfirm' multipart/form-data: schema: $ref: '#/components/schemas/PasswordResetConfirm' required: true security: - jwtAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/PasswordResetConfirm' description: '' /api/v1/accounts/users/reset_username/: post: operationId: api_v1_accounts_users_reset_username_create tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/SendEmailReset' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/SendEmailReset' multipart/form-data: schema: $ref: '#/components/schemas/SendEmailReset' required: true security: - jwtAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/SendEmailReset' description: '' /api/v1/accounts/users/reset_username_confirm/: post: operationId: api_v1_accounts_users_reset_username_confirm_create tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/UsernameResetConfirm' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/UsernameResetConfirm' multipart/form-data: schema: $ref: '#/components/schemas/UsernameResetConfirm' required: true security: - jwtAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/UsernameResetConfirm' description: '' /api/v1/accounts/users/set_password/: post: operationId: api_v1_accounts_users_set_password_create tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/SetPassword' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/SetPassword' multipart/form-data: schema: $ref: '#/components/schemas/SetPassword' required: true security: - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/SetPassword' description: '' /api/v1/accounts/users/set_username/: post: operationId: api_v1_accounts_users_set_username_create tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/SetUsername' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/SetUsername' multipart/form-data: schema: $ref: '#/components/schemas/SetUsername' required: true security: - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/SetUsername' description: '' /api/v1/courses/: get: operationId: api_v1_courses_list tags: - api security: - jwtAuth: [] - {} responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/Course' description: '' /api/v1/landmarks/: get: operationId: api_v1_landmarks_list tags: - api security: - jwtAuth: [] - {} responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/Landmark' description: '' /api/v1/messages/: get: operationId: api_v1_messages_list tags: - api security: - jwtAuth: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/Message' description: '' post: operationId: api_v1_messages_create tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/Message' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Message' multipart/form-data: schema: $ref: '#/components/schemas/Message' required: true security: - jwtAuth: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/Message' description: '' /api/v1/messages/{id}/: get: operationId: api_v1_messages_retrieve parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this message. required: true tags: - api security: - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Message' description: '' /api/v1/semesters/: get: operationId: api_v1_semesters_list tags: - api security: - jwtAuth: [] - {} responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/Semester' description: '' /api/v1/student_status/list/: get: operationId: api_v1_student_status_list_list tags: - api security: - jwtAuth: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/StudentStatus' description: '' /api/v1/student_status/near/: get: operationId: api_v1_student_status_near_list tags: - api security: - jwtAuth: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/StudentStatusLocation' description: '' /api/v1/student_status/near_current_location//: post: operationId: api_v1_student_status_near_current_location_create tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/StudentStatusLocation' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/StudentStatusLocation' multipart/form-data: schema: $ref: '#/components/schemas/StudentStatusLocation' required: true security: - jwtAuth: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/StudentStatusLocation' description: '' /api/v1/student_status/self/: get: operationId: api_v1_student_status_self_retrieve tags: - api security: - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/StudentStatus' description: '' put: operationId: api_v1_student_status_self_update tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/StudentStatus' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/StudentStatus' multipart/form-data: schema: $ref: '#/components/schemas/StudentStatus' required: true security: - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/StudentStatus' description: '' patch: operationId: api_v1_student_status_self_partial_update tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedStudentStatus' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedStudentStatus' multipart/form-data: schema: $ref: '#/components/schemas/PatchedStudentStatus' security: - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/StudentStatus' description: '' /api/v1/study_groups/: get: operationId: api_v1_study_groups_list tags: - api security: - jwtAuth: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/StudyGroup' description: '' /api/v1/study_groups/{name}/: get: operationId: api_v1_study_groups_retrieve parameters: - in: path name: name schema: type: string required: true tags: - api security: - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/StudyGroupDetail' description: '' /api/v1/study_groups/create/: post: operationId: api_v1_study_groups_create_create tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/StudyGroupCreate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/StudyGroupCreate' multipart/form-data: schema: $ref: '#/components/schemas/StudyGroupCreate' required: true security: - jwtAuth: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/StudyGroupCreate' description: '' /api/v1/study_groups/create/{id}/: patch: operationId: api_v1_study_groups_create_partial_update parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this study group. required: true tags: - api requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedStudyGroupCreate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedStudyGroupCreate' multipart/form-data: schema: $ref: '#/components/schemas/PatchedStudyGroupCreate' security: - jwtAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/StudyGroupCreate' description: '' delete: operationId: api_v1_study_groups_create_destroy parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this study group. required: true tags: - api security: - jwtAuth: [] responses: '204': description: No response body /api/v1/study_groups/member_avatars/: get: operationId: api_v1_study_groups_member_avatars_list tags: - api security: - jwtAuth: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/CustomUserAvatar' description: '' /api/v1/study_groups/near/: get: operationId: api_v1_study_groups_near_list tags: - api security: - jwtAuth: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/StudyGroupDistance' description: '' /api/v1/subjects/: get: operationId: api_v1_subjects_list tags: - api security: - jwtAuth: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/SubjectInstance' description: '' /api/v1/subjects/{course_slug}: get: operationId: api_v1_subjects_list_2 parameters: - in: path name: course_slug schema: type: string required: true tags: - api security: - jwtAuth: [] - {} responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/SubjectInstance' description: '' /api/v1/subjects/{course_slug}/{year_slug}/{semester_slug}: get: operationId: api_v1_subjects_list_3 parameters: - in: path name: course_slug schema: type: string required: true - in: path name: semester_slug schema: type: string required: true - in: path name: year_slug schema: type: string required: true tags: - api security: - jwtAuth: [] - {} responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/SubjectInstance' description: '' /api/v1/subjects/all: get: operationId: api_v1_subjects_all_list tags: - api security: - jwtAuth: [] - {} responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/SubjectInstance' description: '' /api/v1/year_levels/: get: operationId: api_v1_year_levels_list tags: - api security: - jwtAuth: [] - {} responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/YearLevel' description: '' components: schemas: Activation: type: object properties: uid: type: string token: type: string required: - token - uid Course: type: object properties: id: type: integer readOnly: true name: type: string maxLength: 64 shortname: type: string maxLength: 16 required: - id - name - shortname CustomUser: type: object properties: username: type: string description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. pattern: ^[\w.@+-]+$ maxLength: 150 email: type: string format: email title: Email address maxLength: 254 student_id_number: type: integer year_level: type: string nullable: true yearlevel_shortname: type: string readOnly: true semester: type: string nullable: true semester_shortname: type: string readOnly: true course: type: string nullable: true course_shortname: type: string readOnly: true subjects: type: array items: type: string avatar: type: string format: uri first_name: type: string maxLength: 100 last_name: type: string maxLength: 100 irregular: type: boolean required: - avatar - course_shortname - first_name - last_name - semester_shortname - student_id_number - username - yearlevel_shortname CustomUserAvatar: type: object properties: avatar: type: string format: uri username: type: string readOnly: true description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. required: - avatar - username Landmark: type: object properties: id: type: integer readOnly: true name: type: string maxLength: 64 location: type: string required: - id - location - name Message: type: object properties: id: type: integer readOnly: true user: type: string description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. study_group: type: string message_content: type: string timestamp: type: string format: date-time required: - id - message_content PasswordResetConfirm: type: object properties: uid: type: string token: type: string new_password: type: string required: - new_password - token - uid PatchedCustomUser: type: object properties: username: type: string description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. pattern: ^[\w.@+-]+$ maxLength: 150 email: type: string format: email title: Email address maxLength: 254 student_id_number: type: integer year_level: type: string nullable: true yearlevel_shortname: type: string readOnly: true semester: type: string nullable: true semester_shortname: type: string readOnly: true course: type: string nullable: true course_shortname: type: string readOnly: true subjects: type: array items: type: string avatar: type: string format: uri first_name: type: string maxLength: 100 last_name: type: string maxLength: 100 irregular: type: boolean PatchedStudentStatus: type: object properties: user: type: string readOnly: true subject: type: string location: type: string timestamp: type: string format: date-time active: type: boolean study_group: type: string nullable: true landmark: type: string nullable: true PatchedStudyGroupCreate: type: object properties: id: type: integer readOnly: true name: type: string subject: type: string location: type: string landmark: type: string nullable: true timestamp: type: string format: date-time readOnly: true Semester: type: object properties: id: type: integer readOnly: true name: type: string maxLength: 64 shortname: type: string maxLength: 16 required: - id - name - shortname SendEmailReset: type: object properties: email: type: string format: email required: - email SetPassword: type: object properties: new_password: type: string current_password: type: string required: - current_password - new_password SetUsername: type: object properties: current_password: type: string new_username: type: string title: Username description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. pattern: ^[\w.@+-]+$ maxLength: 150 required: - current_password - new_username StudentStatus: type: object properties: user: type: string readOnly: true subject: type: string location: type: string timestamp: type: string format: date-time active: type: boolean study_group: type: string nullable: true landmark: type: string nullable: true required: - active - location - subject - timestamp - user StudentStatusLocation: type: object properties: user: type: string readOnly: true location: type: string distance: type: string readOnly: true subject: type: string active: type: boolean readOnly: true study_group: type: string nullable: true landmark: type: string nullable: true required: - active - distance - location - subject - user StudyGroup: type: object properties: id: type: integer readOnly: true name: type: string students: type: array items: type: string subject: type: string location: type: string landmark: type: string nullable: true radius: type: number format: double timestamp: type: string format: date-time readOnly: true required: - id - location - name - radius - students - subject - timestamp StudyGroupCreate: type: object properties: id: type: integer readOnly: true name: type: string subject: type: string location: type: string landmark: type: string nullable: true timestamp: type: string format: date-time readOnly: true required: - id - location - name - subject - timestamp StudyGroupDetail: type: object properties: id: type: integer readOnly: true name: type: string students: type: array items: type: string subject: type: string location: type: string landmark: type: string nullable: true timestamp: type: string format: date-time readOnly: true required: - id - location - name - students - subject - timestamp StudyGroupDistance: type: object properties: id: type: integer readOnly: true name: type: string students: type: array items: type: string subject: type: string location: type: string landmark: type: string nullable: true distance: type: string readOnly: true default: 0 timestamp: type: string format: date-time readOnly: true required: - distance - id - location - name - students - subject - timestamp SubjectInstance: type: object properties: id: type: integer readOnly: true name: type: string readOnly: true code: type: string maxLength: 16 course: type: string nullable: true year_level: type: string nullable: true semester: type: string nullable: true required: - code - course - id - name - semester - year_level TokenObtainPair: type: object properties: username: type: string writeOnly: true password: type: string writeOnly: true access: type: string readOnly: true refresh: type: string readOnly: true required: - access - password - refresh - username TokenRefresh: type: object properties: access: type: string readOnly: true refresh: type: string writeOnly: true required: - access - refresh TokenVerify: type: object properties: token: type: string writeOnly: true required: - token UserRegistration: type: object properties: username: type: string description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. pattern: ^[\w.@+-]+$ maxLength: 150 email: type: string format: email password: type: string writeOnly: true student_id_number: type: string year_level: type: integer nullable: true semester: type: integer nullable: true course: type: integer nullable: true subjects: type: array items: type: string nullable: true avatar: type: string format: uri nullable: true first_name: type: string maxLength: 100 last_name: type: string maxLength: 100 required: - email - first_name - last_name - password - student_id_number - username UsernameResetConfirm: type: object properties: new_username: type: string title: Username description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. pattern: ^[\w.@+-]+$ maxLength: 150 required: - new_username YearLevel: type: object properties: id: type: integer readOnly: true name: type: string maxLength: 64 shortname: type: string maxLength: 16 required: - id - name - shortname securitySchemes: jwtAuth: type: http scheme: bearer bearerFormat: JWT