2515 lines
74 KiB
YAML
2515 lines
74 KiB
YAML
openapi: 3.0.3
|
|
info:
|
|
title: AI Desa+ API
|
|
description: API for the AI Desa+ management system, providing endpoints for managing announcements, banners, calendar events, discussions, divisions, documents, groups, positions, projects, tasks, users, and division reports.
|
|
version: 1.0.0
|
|
contact:
|
|
name: API Support
|
|
email: support@desa-plus.com
|
|
|
|
servers:
|
|
- url: http://localhost:3000/api/ai
|
|
description: Development server
|
|
- url: https://api.desa-plus.com/api/ai
|
|
description: Production server
|
|
|
|
components:
|
|
securitySchemes:
|
|
bearerAuth:
|
|
type: http
|
|
scheme: bearer
|
|
bearerFormat: JWT
|
|
|
|
schemas:
|
|
BaseResponse:
|
|
type: object
|
|
required:
|
|
- success
|
|
- message
|
|
properties:
|
|
success:
|
|
type: boolean
|
|
description: Indicates whether the request was successful
|
|
message:
|
|
type: string
|
|
description: Response message or error description
|
|
meta:
|
|
type: object
|
|
properties:
|
|
total:
|
|
type: integer
|
|
description: Total number of items
|
|
page:
|
|
type: integer
|
|
description: Current page number
|
|
get:
|
|
type: integer
|
|
description: Number of items per page
|
|
description: Pagination metadata
|
|
|
|
# Banner
|
|
BannerBase:
|
|
type: object
|
|
required:
|
|
- id
|
|
- idVillage
|
|
- title
|
|
- image
|
|
- isActive
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the banner
|
|
idVillage:
|
|
type: string
|
|
description: ID of the village associated with the banner
|
|
title:
|
|
type: string
|
|
description: Title of the banner
|
|
image:
|
|
type: string
|
|
description: URL or path to the banner image
|
|
extension:
|
|
type: string
|
|
description: File extension of the banner image (e.g., jpg, png)
|
|
nullable: true
|
|
isActive:
|
|
type: boolean
|
|
description: Indicates whether the banner is active
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the banner was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the banner was last updated
|
|
|
|
BannerListResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/BannerBase"
|
|
description: List of banners
|
|
|
|
BannerDetailResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
$ref: "#/components/schemas/BannerBase"
|
|
description: Details of a specific banner
|
|
|
|
# Announcement
|
|
AnnouncementBase:
|
|
type: object
|
|
required:
|
|
- id
|
|
- idVillage
|
|
- title
|
|
- desc
|
|
- isActive
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the announcement
|
|
idVillage:
|
|
type: string
|
|
description: ID of the village associated with the announcement
|
|
title:
|
|
type: string
|
|
description: Title of the announcement
|
|
desc:
|
|
type: string
|
|
description: Description or content of the announcement
|
|
isActive:
|
|
type: boolean
|
|
description: Indicates whether the announcement is active
|
|
createdBy:
|
|
type: string
|
|
description: ID of the user who created the announcement
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the announcement was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the announcement was last updated
|
|
|
|
AnnouncementMember:
|
|
type: object
|
|
required:
|
|
- idGroup
|
|
- idDivision
|
|
properties:
|
|
idGroup:
|
|
type: string
|
|
description: ID of the group associated with the announcement
|
|
idDivision:
|
|
type: string
|
|
description: ID of the division associated with the announcement
|
|
group:
|
|
type: string
|
|
description: Name of the group
|
|
division:
|
|
type: string
|
|
description: Name of the division
|
|
|
|
AnnouncementListResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/AnnouncementBase"
|
|
description: List of announcements
|
|
|
|
AnnouncementDetailResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the announcement
|
|
title:
|
|
type: string
|
|
description: Title of the announcement
|
|
desc:
|
|
type: string
|
|
description: Description or content of the announcement
|
|
isActive:
|
|
type: boolean
|
|
description: Indicates whether the announcement is active
|
|
createdBy:
|
|
type: string
|
|
description: ID of the user who created the announcement
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the announcement was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the announcement was last updated
|
|
member:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/AnnouncementMember"
|
|
description: List of members associated with the announcement
|
|
description: Details of a specific announcement
|
|
|
|
# Calendar
|
|
CalendarBase:
|
|
type: object
|
|
required:
|
|
- id
|
|
- dateStart
|
|
- title
|
|
- isActive
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the calendar event
|
|
dateStart:
|
|
type: string
|
|
format: date-time
|
|
description: Start date and time of the event
|
|
timeStart:
|
|
type: string
|
|
description: Start time of the event (e.g., HH:MM)
|
|
nullable: true
|
|
timeEnd:
|
|
type: string
|
|
description: End time of the event (e.g., HH:MM)
|
|
nullable: true
|
|
title:
|
|
type: string
|
|
description: Title of the event
|
|
desc:
|
|
type: string
|
|
description: Description of the event
|
|
nullable: true
|
|
createdBy:
|
|
type: string
|
|
description: ID of the user who created the event
|
|
isActive:
|
|
type: boolean
|
|
description: Indicates whether the event is active
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the event was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the event was last updated
|
|
|
|
CalendarMember:
|
|
type: object
|
|
required:
|
|
- id
|
|
- idUser
|
|
- name
|
|
- email
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the member
|
|
idUser:
|
|
type: string
|
|
description: ID of the user
|
|
name:
|
|
type: string
|
|
description: Name of the user
|
|
email:
|
|
type: string
|
|
description: Email of the user
|
|
img:
|
|
type: string
|
|
description: URL or path to the user's image
|
|
nullable: true
|
|
|
|
CalendarListResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/CalendarBase"
|
|
description: List of calendar events
|
|
|
|
CalendarDetailResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the event
|
|
dateStart:
|
|
type: string
|
|
format: date-time
|
|
description: Start date and time of the event
|
|
timeStart:
|
|
type: string
|
|
description: Start time of the event (e.g., HH:MM)
|
|
nullable: true
|
|
timeEnd:
|
|
type: string
|
|
description: End time of the event (e.g., HH:MM)
|
|
nullable: true
|
|
title:
|
|
type: string
|
|
description: Title of the event
|
|
desc:
|
|
type: string
|
|
description: Description of the event
|
|
nullable: true
|
|
linkMeet:
|
|
type: string
|
|
description: URL for the meeting (if applicable)
|
|
nullable: true
|
|
repeatEventType:
|
|
type: string
|
|
description: Type of event repetition (e.g., daily, weekly)
|
|
nullable: true
|
|
repeatValue:
|
|
type: integer
|
|
description: Number of repetitions or interval
|
|
nullable: true
|
|
createdBy:
|
|
type: string
|
|
description: ID of the user who created the event
|
|
isActive:
|
|
type: boolean
|
|
description: Indicates whether the event is active
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the event was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the event was last updated
|
|
member:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/CalendarMember"
|
|
description: List of members associated with the event
|
|
description: Details of a specific calendar event
|
|
|
|
# Discussion
|
|
DiscussionBase:
|
|
type: object
|
|
required:
|
|
- id
|
|
- desc
|
|
- idDivision
|
|
- status
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the discussion
|
|
desc:
|
|
type: string
|
|
description: Description of the discussion
|
|
idDivision:
|
|
type: string
|
|
description: ID of the division associated with the discussion
|
|
division:
|
|
type: string
|
|
description: Name of the division
|
|
status:
|
|
type: string
|
|
enum: [open, closed]
|
|
description: Status of the discussion
|
|
totalKomentar:
|
|
type: integer
|
|
description: Total number of comments in the discussion
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the discussion was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the discussion was last updated
|
|
|
|
DiscussionComment:
|
|
type: object
|
|
required:
|
|
- id
|
|
- comment
|
|
- username
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the comment
|
|
comment:
|
|
type: string
|
|
description: Content of the comment
|
|
username:
|
|
type: string
|
|
description: Username of the commenter
|
|
userimg:
|
|
type: string
|
|
description: URL or path to the commenter's image
|
|
nullable: true
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the comment was created
|
|
|
|
DiscussionListResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/DiscussionBase"
|
|
description: List of discussions
|
|
|
|
DiscussionDetailResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the discussion
|
|
idDivision:
|
|
type: string
|
|
description: ID of the division associated with the discussion
|
|
division:
|
|
type: string
|
|
description: Name of the division
|
|
desc:
|
|
type: string
|
|
description: Description of the discussion
|
|
status:
|
|
type: string
|
|
enum: [open, closed]
|
|
description: Status of the discussion
|
|
isActive:
|
|
type: boolean
|
|
description: Indicates whether the discussion is active
|
|
createdBy:
|
|
type: string
|
|
description: ID of the user who created the discussion
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the discussion was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the discussion was last updated
|
|
komentar:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/DiscussionComment"
|
|
description: List of comments in the discussion
|
|
description: Details of a specific discussion
|
|
|
|
# Discussion General
|
|
DiskusiUmumBase:
|
|
type: object
|
|
required:
|
|
- id
|
|
- title
|
|
- desc
|
|
- status
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the general discussion
|
|
title:
|
|
type: string
|
|
description: Title of the general discussion
|
|
desc:
|
|
type: string
|
|
description: Description of the general discussion
|
|
status:
|
|
type: string
|
|
enum: [open, closed]
|
|
description: Status of the general discussion
|
|
group:
|
|
type: string
|
|
description: Name of the group associated with the discussion
|
|
totalKomentar:
|
|
type: integer
|
|
description: Total number of comments in the discussion
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the discussion was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the discussion was last updated
|
|
|
|
DiskusiUmumListResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/DiskusiUmumBase"
|
|
description: List of general discussions
|
|
|
|
DiskusiUmumDetailResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: object
|
|
required:
|
|
- id
|
|
- title
|
|
- desc
|
|
- status
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the general discussion
|
|
idGroup:
|
|
type: string
|
|
description: ID of the group associated with the discussion
|
|
group:
|
|
type: string
|
|
description: Name of the group
|
|
title:
|
|
type: string
|
|
description: Title of the general discussion
|
|
desc:
|
|
type: string
|
|
description: Description of the general discussion
|
|
status:
|
|
type: string
|
|
enum: [open, closed]
|
|
description: Status of the general discussion
|
|
isActive:
|
|
type: boolean
|
|
description: Indicates whether the discussion is active
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the discussion was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the discussion was last updated
|
|
description: Details of a specific general discussion
|
|
|
|
DiskusiUmumMemberResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
type: object
|
|
required:
|
|
- idUser
|
|
- name
|
|
properties:
|
|
idUser:
|
|
type: string
|
|
description: ID of the user
|
|
name:
|
|
type: string
|
|
description: Name of the user
|
|
img:
|
|
type: string
|
|
description: URL or path to the user's image
|
|
nullable: true
|
|
description: List of members in the general discussion
|
|
|
|
DiskusiUmumCommentResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
type: object
|
|
required:
|
|
- id
|
|
- comment
|
|
- idUser
|
|
- username
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the comment
|
|
comment:
|
|
type: string
|
|
description: Content of the comment
|
|
idUser:
|
|
type: string
|
|
description: ID of the user who made the comment
|
|
username:
|
|
type: string
|
|
description: Username of the commenter
|
|
img:
|
|
type: string
|
|
description: URL or path to the commenter's image
|
|
nullable: true
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the comment was created
|
|
description: List of comments in the general discussion
|
|
|
|
# Division
|
|
DivisiBase:
|
|
type: object
|
|
required:
|
|
- id
|
|
- name
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the division
|
|
name:
|
|
type: string
|
|
description: Name of the division
|
|
desc:
|
|
type: string
|
|
description: Description of the division
|
|
nullable: true
|
|
idGroup:
|
|
type: string
|
|
description: ID of the group associated with the division
|
|
group:
|
|
type: string
|
|
description: Name of the group
|
|
jumlahMember:
|
|
type: integer
|
|
description: Number of members in the division
|
|
|
|
DivisiListResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/DivisiBase"
|
|
description: List of divisions
|
|
|
|
DivisiDetailResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: object
|
|
required:
|
|
- id
|
|
- name
|
|
- isActive
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the division
|
|
idVillage:
|
|
type: string
|
|
description: ID of the village associated with the division
|
|
idGroup:
|
|
type: string
|
|
description: ID of the group associated with the division
|
|
name:
|
|
type: string
|
|
description: Name of the division
|
|
desc:
|
|
type: string
|
|
description: Description of the division
|
|
nullable: true
|
|
isActive:
|
|
type: boolean
|
|
description: Indicates whether the division is active
|
|
createdBy:
|
|
type: string
|
|
description: ID of the user who created the division
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the division was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the division was last updated
|
|
member:
|
|
type: array
|
|
items:
|
|
type: object
|
|
required:
|
|
- id
|
|
- idUser
|
|
- name
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the member
|
|
idUser:
|
|
type: string
|
|
description: ID of the user
|
|
name:
|
|
type: string
|
|
description: Name of the user
|
|
isAdmin:
|
|
type: boolean
|
|
description: Indicates whether the user is an admin
|
|
img:
|
|
type: string
|
|
description: URL or path to the user's image
|
|
nullable: true
|
|
description: List of members in the division
|
|
description: Details of a specific division
|
|
|
|
DivisiReportDokumenResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: object
|
|
properties:
|
|
gambar:
|
|
type: integer
|
|
description: Number of images in the division
|
|
dokumen:
|
|
type: integer
|
|
description: Number of documents in the division
|
|
description: Document report for the division
|
|
|
|
DivisiReportEventResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: object
|
|
properties:
|
|
selesai:
|
|
type: integer
|
|
description: Number of completed events
|
|
akan_datang:
|
|
type: integer
|
|
description: Number of upcoming events
|
|
description: Event report for the division
|
|
|
|
DivisiReportProgressResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: object
|
|
properties:
|
|
Segera:
|
|
type: string
|
|
description: Percentage of tasks in 'Segera' status
|
|
Dikerjakan:
|
|
type: string
|
|
description: Percentage of tasks in 'Dikerjakan' status
|
|
Selesai:
|
|
type: integer
|
|
description: Percentage of tasks in 'Selesai' status
|
|
Dibatalkan:
|
|
type: string
|
|
description: Percentage of tasks in 'Dibatalkan' status
|
|
description: Progress report for the division
|
|
|
|
# Document
|
|
DocumentItem:
|
|
type: object
|
|
required:
|
|
- id
|
|
- category
|
|
- name
|
|
- path
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the document or folder
|
|
category:
|
|
type: string
|
|
enum: [FILE, FOLDER]
|
|
description: Type of item (file or folder)
|
|
name:
|
|
type: string
|
|
description: Name of the document or folder
|
|
extension:
|
|
type: string
|
|
description: File extension (e.g., pdf, docx)
|
|
nullable: true
|
|
idStorage:
|
|
type: string
|
|
description: ID of the storage location
|
|
nullable: true
|
|
path:
|
|
type: string
|
|
description: Path to the document or folder
|
|
createdBy:
|
|
type: string
|
|
description: ID of the user who created the document or folder
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the document or folder was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the document or folder was last updated
|
|
share:
|
|
type: boolean
|
|
description: Indicates whether the document or folder is shared
|
|
|
|
DocumentListResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/DocumentItem"
|
|
description: List of documents and folders
|
|
|
|
# Group
|
|
GroupItem:
|
|
type: object
|
|
required:
|
|
- id
|
|
- idVillage
|
|
- name
|
|
- isActive
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the group
|
|
idVillage:
|
|
type: string
|
|
description: ID of the village associated with the group
|
|
name:
|
|
type: string
|
|
description: Name of the group
|
|
isActive:
|
|
type: boolean
|
|
description: Indicates whether the group is active
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the group was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the group was last updated
|
|
|
|
GroupListResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/GroupItem"
|
|
description: List of groups
|
|
|
|
# Position
|
|
PositionItem:
|
|
type: object
|
|
required:
|
|
- id
|
|
- name
|
|
- idGroup
|
|
- isActive
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the position
|
|
name:
|
|
type: string
|
|
description: Name of the position
|
|
idGroup:
|
|
type: string
|
|
description: ID of the group associated with the position
|
|
group:
|
|
type: string
|
|
description: Name of the group
|
|
isActive:
|
|
type: boolean
|
|
description: Indicates whether the position is active
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the position was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the position was last updated
|
|
|
|
PositionListResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/PositionItem"
|
|
description: List of positions
|
|
|
|
# Project
|
|
ProjectBase:
|
|
type: object
|
|
required:
|
|
- id
|
|
- idGroup
|
|
- title
|
|
- status
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the project
|
|
idGroup:
|
|
type: string
|
|
description: ID of the group associated with the project
|
|
title:
|
|
type: string
|
|
description: Title of the project
|
|
desc:
|
|
type: string
|
|
description: Description of the project
|
|
nullable: true
|
|
group:
|
|
type: string
|
|
description: Name of the group
|
|
status:
|
|
type: string
|
|
enum: [segera, dikerjakan, selesai, batal]
|
|
description: Status of the project
|
|
progress:
|
|
type: integer
|
|
description: Progress percentage of the project
|
|
member:
|
|
type: integer
|
|
description: Number of members in the project
|
|
|
|
BaseResponseProjectList:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/ProjectBase"
|
|
description: List of projects
|
|
|
|
BaseResponseProjectDetail:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: object
|
|
required:
|
|
- id
|
|
- idVillage
|
|
- idGroup
|
|
- title
|
|
- status
|
|
- isActive
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the project
|
|
idVillage:
|
|
type: string
|
|
description: ID of the village associated with the project
|
|
idGroup:
|
|
type: string
|
|
description: ID of the group associated with the project
|
|
group:
|
|
type: string
|
|
description: Name of the group
|
|
title:
|
|
type: string
|
|
description: Title of the project
|
|
status:
|
|
type: string
|
|
enum: [segera, dikerjakan, selesai, batal]
|
|
description: Status of the project
|
|
desc:
|
|
type: string
|
|
description: Description of the project
|
|
nullable: true
|
|
reason:
|
|
type: string
|
|
description: Reason for project status (e.g., cancellation)
|
|
nullable: true
|
|
report:
|
|
type: string
|
|
description: Project report or summary
|
|
nullable: true
|
|
isActive:
|
|
type: boolean
|
|
description: Indicates whether the project is active
|
|
progress:
|
|
type: integer
|
|
description: Progress percentage of the project
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the project was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the project was last updated
|
|
description: Details of a specific project
|
|
|
|
# Task
|
|
TaskBase:
|
|
type: object
|
|
required:
|
|
- id
|
|
- idDivision
|
|
- title
|
|
- status
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the task
|
|
idDivision:
|
|
type: string
|
|
description: ID of the division associated with the task
|
|
title:
|
|
type: string
|
|
description: Title of the task
|
|
desc:
|
|
type: string
|
|
description: Description of the task
|
|
nullable: true
|
|
division:
|
|
type: string
|
|
description: Name of the division
|
|
status:
|
|
type: string
|
|
enum: [segera, dikerjakan, selesai, batal]
|
|
description: Status of the task
|
|
progress:
|
|
type: integer
|
|
description: Progress percentage of the task
|
|
member:
|
|
type: integer
|
|
description: Number of members assigned to the task
|
|
|
|
BaseResponseTaskList:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/TaskBase"
|
|
description: List of tasks
|
|
|
|
BaseResponseTaskDetail:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: object
|
|
required:
|
|
- id
|
|
- idDivision
|
|
- title
|
|
- status
|
|
- isActive
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the task
|
|
idDivision:
|
|
type: string
|
|
description: ID of the division associated with the task
|
|
division:
|
|
type: string
|
|
description: Name of the division
|
|
title:
|
|
type: string
|
|
description: Title of the task
|
|
status:
|
|
type: string
|
|
enum: [segera, dikerjakan, selesai, batal]
|
|
description: Status of the task
|
|
desc:
|
|
type: string
|
|
description: Description of the task
|
|
nullable: true
|
|
reason:
|
|
type: string
|
|
description: Reason for task status (e.g., cancellation)
|
|
nullable: true
|
|
report:
|
|
type: string
|
|
description: Task report or summary
|
|
nullable: true
|
|
isActive:
|
|
type: boolean
|
|
description: Indicates whether the task is active
|
|
progress:
|
|
type: integer
|
|
description: Progress percentage of the task
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the task was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the task was last updated
|
|
description: Details of a specific task
|
|
|
|
BaseResponseSubTaskList:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
type: object
|
|
required:
|
|
- id
|
|
- title
|
|
- status
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the subtask
|
|
title:
|
|
type: string
|
|
description: Title of the subtask
|
|
status:
|
|
type: string
|
|
enum: [belum_selesai, selesai]
|
|
description: Status of the subtask
|
|
dateStart:
|
|
type: string
|
|
format: date-time
|
|
description: Start date and time of the subtask
|
|
dateEnd:
|
|
type: string
|
|
format: date-time
|
|
description: End date and time of the subtask
|
|
description: List of subtasks
|
|
|
|
BaseResponseMemberList:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
type: object
|
|
required:
|
|
- id
|
|
- idUser
|
|
- name
|
|
- email
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the member
|
|
idUser:
|
|
type: string
|
|
description: ID of the user
|
|
name:
|
|
type: string
|
|
description: Name of the user
|
|
email:
|
|
type: string
|
|
description: Email of the user
|
|
img:
|
|
type: string
|
|
description: URL or path to the user's image
|
|
nullable: true
|
|
position:
|
|
type: string
|
|
description: Position of the user
|
|
nullable: true
|
|
description: List of members
|
|
|
|
BaseResponseFileList:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/DocumentItem"
|
|
description: List of files
|
|
|
|
BaseResponseLinkList:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
type: object
|
|
required:
|
|
- id
|
|
- idProject
|
|
- link
|
|
- isActive
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the link
|
|
idProject:
|
|
type: string
|
|
description: ID of the project associated with the link
|
|
link:
|
|
type: string
|
|
description: URL of the link
|
|
isActive:
|
|
type: boolean
|
|
description: Indicates whether the link is active
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the link was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the link was last updated
|
|
description: List of links
|
|
|
|
# User
|
|
UserBase:
|
|
type: object
|
|
required:
|
|
- id
|
|
- idUserRole
|
|
- nik
|
|
- name
|
|
- gender
|
|
- phone
|
|
- isActive
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the user
|
|
idUserRole:
|
|
type: string
|
|
description: ID of the user's role
|
|
nik:
|
|
type: string
|
|
description: National identification number of the user
|
|
name:
|
|
type: string
|
|
description: Name of the user
|
|
gender:
|
|
type: string
|
|
description: Gender of the user
|
|
phone:
|
|
type: string
|
|
description: Phone number of the user
|
|
position:
|
|
type: string
|
|
description: Position of the user
|
|
nullable: true
|
|
group:
|
|
type: string
|
|
description: Name of the group the user belongs to
|
|
nullable: true
|
|
isActive:
|
|
type: boolean
|
|
description: Indicates whether the user is active
|
|
|
|
UserListResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/UserBase"
|
|
description: List of users
|
|
|
|
UserDetailResponse:
|
|
allOf:
|
|
- $ref: "#/components/schemas/BaseResponse"
|
|
- type: object
|
|
properties:
|
|
data:
|
|
type: object
|
|
required:
|
|
- id
|
|
- idUserRole
|
|
- nik
|
|
- name
|
|
- phone
|
|
- email
|
|
- gender
|
|
- isActive
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the user
|
|
idUserRole:
|
|
type: string
|
|
description: ID of the user's role
|
|
nik:
|
|
type: string
|
|
description: National identification number of the user
|
|
name:
|
|
type: string
|
|
description: Name of the user
|
|
email:
|
|
type: string
|
|
description: Email of the user
|
|
gender:
|
|
type: string
|
|
description: Gender of the user
|
|
phone:
|
|
type: string
|
|
description: Phone number of the user
|
|
img:
|
|
type: string
|
|
description: URL or path to the user's image
|
|
nullable: true
|
|
idGroup:
|
|
type: string
|
|
description: ID of the group the user belongs to
|
|
nullable: true
|
|
idPosition:
|
|
type: string
|
|
description: ID of the user's position
|
|
nullable: true
|
|
role:
|
|
type: string
|
|
description: Role of the user
|
|
nullable: true
|
|
position:
|
|
type: string
|
|
description: Position of the user
|
|
nullable: true
|
|
group:
|
|
type: string
|
|
description: Name of the group the user belongs to
|
|
nullable: true
|
|
isActive:
|
|
type: boolean
|
|
description: Indicates whether the user is active
|
|
createdAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the user was created
|
|
updatedAt:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp when the user was last updated
|
|
description: Details of a specific user
|
|
|
|
paths:
|
|
# Announcement
|
|
/announcement:
|
|
get:
|
|
tags:
|
|
- Announcement
|
|
summary: Get list of announcements
|
|
description: Retrieves a paginated list of announcements filtered by village, search term, and active status
|
|
parameters:
|
|
- name: desa
|
|
in: query
|
|
required: true
|
|
description: Village ID
|
|
schema:
|
|
type: string
|
|
- name: search
|
|
in: query
|
|
description: Search term for announcement title or description
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: page
|
|
in: query
|
|
description: Page number for pagination
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 1
|
|
- name: perPage
|
|
in: query
|
|
description: Number of items per page
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 10
|
|
- name: active
|
|
in: query
|
|
description: Filter by active status
|
|
schema:
|
|
type: boolean
|
|
nullable: true
|
|
responses:
|
|
"200":
|
|
description: List of announcements
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/AnnouncementListResponse"
|
|
"400":
|
|
description: Bad request (e.g., invalid parameters)
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
/announcement/{id}:
|
|
get:
|
|
tags:
|
|
- Announcement
|
|
summary: Get announcement details
|
|
description: Retrieves details of a specific announcement
|
|
parameters:
|
|
- name: id
|
|
in: path
|
|
required: true
|
|
description: Announcement ID
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Announcement details
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/AnnouncementDetailResponse"
|
|
"404":
|
|
description: Announcement not found
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
# Banner
|
|
/banner:
|
|
get:
|
|
tags:
|
|
- Banner
|
|
summary: Get list of banners
|
|
description: Retrieves a paginated list of banners filtered by village, search term, and active status
|
|
parameters:
|
|
- name: desa
|
|
in: query
|
|
required: true
|
|
description: Village ID
|
|
schema:
|
|
type: string
|
|
- name: search
|
|
in: query
|
|
description: Search term for banner title
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: page
|
|
in: query
|
|
description: Page number for pagination
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 1
|
|
- name: perPage
|
|
in: query
|
|
description: Number of items per page
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 10
|
|
- name: active
|
|
in: query
|
|
description: Filter by active status
|
|
schema:
|
|
type: boolean
|
|
nullable: true
|
|
responses:
|
|
"200":
|
|
description: List of banners
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/BannerListResponse"
|
|
"400":
|
|
description: Bad request (e.g., invalid parameters)
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
/banner/{id}:
|
|
get:
|
|
tags:
|
|
- Banner
|
|
summary: Get banner details
|
|
description: Retrieves details of a specific banner
|
|
parameters:
|
|
- name: id
|
|
in: path
|
|
required: true
|
|
description: Banner ID
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Banner details
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/BannerDetailResponse"
|
|
"404":
|
|
description: Banner not found
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
# Calendar
|
|
/calendar:
|
|
get:
|
|
tags:
|
|
- Calendar
|
|
summary: Get calendar events
|
|
description: Retrieves a paginated list of calendar events filtered by village, date, division, and active status
|
|
parameters:
|
|
- name: desa
|
|
in: query
|
|
required: true
|
|
description: Village ID
|
|
schema:
|
|
type: string
|
|
- name: date
|
|
in: query
|
|
description: Filter by event date
|
|
schema:
|
|
type: string
|
|
format: date
|
|
nullable: true
|
|
- name: division
|
|
in: query
|
|
description: Filter by division ID
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: active
|
|
in: query
|
|
description: Filter by active status
|
|
schema:
|
|
type: boolean
|
|
nullable: true
|
|
- name: search
|
|
in: query
|
|
description: Search term for event title or description
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: page
|
|
in: query
|
|
description: Page number for pagination
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 1
|
|
- name: perPage
|
|
in: query
|
|
description: Number of items per page
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 10
|
|
responses:
|
|
"200":
|
|
description: List of calendar events
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CalendarListResponse"
|
|
"400":
|
|
description: Bad request (e.g., invalid parameters)
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
/calendar/{id}:
|
|
get:
|
|
tags:
|
|
- Calendar
|
|
summary: Get calendar event details
|
|
description: Retrieves details of a specific calendar event
|
|
parameters:
|
|
- name: id
|
|
in: path
|
|
required: true
|
|
description: Event ID
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Event details
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CalendarDetailResponse"
|
|
"404":
|
|
description: Event not found
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
# Discussion
|
|
/discussion:
|
|
get:
|
|
tags:
|
|
- Discussion
|
|
summary: Get division discussions
|
|
description: Retrieves a paginated list of discussions filtered by village, division, status, and active status
|
|
parameters:
|
|
- name: desa
|
|
in: query
|
|
required: true
|
|
description: Village ID
|
|
schema:
|
|
type: string
|
|
- name: division
|
|
in: query
|
|
description: Filter by division ID
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: status
|
|
in: query
|
|
description: Filter by discussion status
|
|
schema:
|
|
type: string
|
|
enum: [open, closed]
|
|
nullable: true
|
|
- name: active
|
|
in: query
|
|
description: Filter by active status
|
|
schema:
|
|
type: boolean
|
|
nullable: true
|
|
- name: search
|
|
in: query
|
|
description: Search term for discussion description
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: page
|
|
in: query
|
|
description: Page number for pagination
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 1
|
|
- name: perPage
|
|
in: query
|
|
description: Number of items per page
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 10
|
|
responses:
|
|
"200":
|
|
description: List of discussions
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/DiscussionListResponse"
|
|
"400":
|
|
description: Bad request (e.g., invalid parameters)
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
/discussion/{id}:
|
|
get:
|
|
tags:
|
|
- Discussion
|
|
summary: Get division discussion details
|
|
description: Retrieves details of a specific division discussion
|
|
parameters:
|
|
- name: id
|
|
in: path
|
|
required: true
|
|
description: Discussion ID
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Discussion details
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/DiscussionDetailResponse"
|
|
"404":
|
|
description: Discussion not found
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
# Discussion General
|
|
/discussion-general:
|
|
get:
|
|
tags:
|
|
- DiscussionGeneral
|
|
summary: Get general discussions
|
|
description: Retrieves a paginated list of general discussions filtered by village, group, status, and active status
|
|
parameters:
|
|
- name: desa
|
|
in: query
|
|
required: true
|
|
description: Village ID
|
|
schema:
|
|
type: string
|
|
- name: group
|
|
in: query
|
|
description: Filter by group ID
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: search
|
|
in: query
|
|
description: Search term for discussion title or description
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: status
|
|
in: query
|
|
description: Filter by discussion status
|
|
schema:
|
|
type: string
|
|
enum: [open, closed]
|
|
nullable: true
|
|
- name: active
|
|
in: query
|
|
description: Filter by active status
|
|
schema:
|
|
type: boolean
|
|
nullable: true
|
|
- name: page
|
|
in: query
|
|
description: Page number for pagination
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 1
|
|
- name: perPage
|
|
in: query
|
|
description: Number of items per page
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 10
|
|
responses:
|
|
"200":
|
|
description: List of general discussions
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/DiskusiUmumListResponse"
|
|
"400":
|
|
description: Bad request (e.g., invalid parameters)
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
/discussion-general/{id}:
|
|
get:
|
|
tags:
|
|
- DiscussionGeneral
|
|
summary: Get general discussion details
|
|
description: Retrieves details of a specific general discussion, including members or comments based on category
|
|
parameters:
|
|
- name: id
|
|
in: path
|
|
required: true
|
|
description: Discussion ID
|
|
schema:
|
|
type: string
|
|
- name: desa
|
|
in: query
|
|
required: true
|
|
description: Village ID
|
|
schema:
|
|
type: string
|
|
- name: cat
|
|
in: query
|
|
description: Category of data to retrieve (detail, member, or comment)
|
|
schema:
|
|
type: string
|
|
enum: [detail, member, comment]
|
|
nullable: true
|
|
responses:
|
|
"200":
|
|
description: Discussion details, members, or comments
|
|
content:
|
|
application/json:
|
|
schema:
|
|
oneOf:
|
|
- $ref: "#/components/schemas/DiskusiUmumDetailResponse"
|
|
- $ref: "#/components/schemas/DiskusiUmumMemberResponse"
|
|
- $ref: "#/components/schemas/DiskusiUmumCommentResponse"
|
|
"400":
|
|
description: Bad request (e.g., invalid parameters)
|
|
"404":
|
|
description: Discussion not found
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
# Division
|
|
/division:
|
|
get:
|
|
tags:
|
|
- Division
|
|
summary: Get divisions
|
|
description: Retrieves a paginated list of divisions filtered by village, group, and active status
|
|
parameters:
|
|
- name: desa
|
|
in: query
|
|
required: true
|
|
description: Village ID
|
|
schema:
|
|
type: string
|
|
- name: group
|
|
in: query
|
|
description: Filter by group ID
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: search
|
|
in: query
|
|
description: Search term for division name or description
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: active
|
|
in: query
|
|
description: Filter by active status
|
|
schema:
|
|
type: boolean
|
|
nullable: true
|
|
- name: page
|
|
in: query
|
|
description: Page number for pagination
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 1
|
|
- name: perPage
|
|
in: query
|
|
description: Number of items per page
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 10
|
|
responses:
|
|
"200":
|
|
description: List of divisions
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/DivisiListResponse"
|
|
"400":
|
|
description: Bad request (e.g., invalid parameters)
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
/division/{id}:
|
|
get:
|
|
tags:
|
|
- Division
|
|
summary: Get division details
|
|
description: Retrieves details of a specific division
|
|
parameters:
|
|
- name: id
|
|
in: path
|
|
required: true
|
|
description: Division ID
|
|
schema:
|
|
type: string
|
|
- name: desa
|
|
in: query
|
|
required: true
|
|
description: Village ID
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: Division details
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/DivisiDetailResponse"
|
|
"404":
|
|
description: Division not found
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
/division/report:
|
|
get:
|
|
tags:
|
|
- Division
|
|
summary: Get division reports
|
|
description: Retrieves reports for a specific division based on category (dokumen, event, or progress)
|
|
parameters:
|
|
- name: desa
|
|
in: query
|
|
required: true
|
|
description: Village ID
|
|
schema:
|
|
type: string
|
|
- name: cat
|
|
in: query
|
|
required: true
|
|
description: Category of report to retrieve (dokumen, event, or progress)
|
|
schema:
|
|
type: string
|
|
enum: [dokumen, event, progress]
|
|
- name: group
|
|
in: query
|
|
description: Group ID
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: division
|
|
in: query
|
|
description: Division ID
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: date-start
|
|
in: query
|
|
required: true
|
|
description: Start date for filtering
|
|
schema:
|
|
type: string
|
|
format: date
|
|
- name: date-end
|
|
in: query
|
|
required: true
|
|
description: End date for filtering
|
|
schema:
|
|
type: string
|
|
format: date
|
|
responses:
|
|
"200":
|
|
description: Division report data
|
|
content:
|
|
application/json:
|
|
schema:
|
|
oneOf:
|
|
- $ref: "#/components/schemas/DivisiReportDokumenResponse"
|
|
- $ref: "#/components/schemas/DivisiReportEventResponse"
|
|
- $ref: "#/components/schemas/DivisiReportProgressResponse"
|
|
"400":
|
|
description: Bad request (e.g., invalid parameters)
|
|
"404":
|
|
description: Division not found
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
# Document
|
|
/document:
|
|
get:
|
|
tags:
|
|
- Document
|
|
summary: Get documents
|
|
description: Retrieves a paginated list of documents and folders filtered by village, division, path, and active status
|
|
parameters:
|
|
- name: desa
|
|
in: query
|
|
required: true
|
|
description: Village ID
|
|
schema:
|
|
type: string
|
|
- name: division
|
|
in: query
|
|
description: Filter by division ID
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: path
|
|
in: query
|
|
description: Filter by document path
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: active
|
|
in: query
|
|
description: Filter by active status
|
|
schema:
|
|
type: boolean
|
|
nullable: true
|
|
- name: search
|
|
in: query
|
|
description: Search term for document name
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: page
|
|
in: query
|
|
description: Page number for pagination
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 1
|
|
- name: perPage
|
|
in: query
|
|
description: Number of items per page
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 10
|
|
responses:
|
|
"200":
|
|
description: List of documents and folders
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/DocumentListResponse"
|
|
"400":
|
|
description: Bad request (e.g., invalid parameters)
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
# Group
|
|
/group:
|
|
get:
|
|
tags:
|
|
- Group
|
|
summary: Get groups
|
|
description: Retrieves a paginated list of groups filtered by village, search term, and active status
|
|
parameters:
|
|
- name: desa
|
|
in: query
|
|
required: true
|
|
description: Village ID
|
|
schema:
|
|
type: string
|
|
- name: search
|
|
in: query
|
|
description: Search term for group name
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: active
|
|
in: query
|
|
description: Filter by active status
|
|
schema:
|
|
type: boolean
|
|
nullable: true
|
|
- name: page
|
|
in: query
|
|
description: Page number for pagination
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 1
|
|
- name: perPage
|
|
in: query
|
|
description: Number of items per page
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 10
|
|
responses:
|
|
"200":
|
|
description: List of groups
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/GroupListResponse"
|
|
"400":
|
|
description: Bad request (e.g., invalid parameters)
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
# Position
|
|
/position:
|
|
get:
|
|
tags:
|
|
- Position
|
|
summary: Get positions
|
|
description: Retrieves a paginated list of positions filtered by village, group, search term, and active status
|
|
parameters:
|
|
- name: desa
|
|
in: query
|
|
required: true
|
|
description: Village ID
|
|
schema:
|
|
type: string
|
|
- name: group
|
|
in: query
|
|
description: Filter by group ID
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: search
|
|
in: query
|
|
description: Search term for position name
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: active
|
|
in: query
|
|
description: Filter by active status
|
|
schema:
|
|
type: boolean
|
|
nullable: true
|
|
- name: page
|
|
in: query
|
|
description: Page number for pagination
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 1
|
|
- name: perPage
|
|
in: query
|
|
description: Number of items per page
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 10
|
|
responses:
|
|
"200":
|
|
description: List of positions
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/PositionListResponse"
|
|
"400":
|
|
description: Bad request (e.g., invalid parameters)
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
# Project
|
|
/project:
|
|
get:
|
|
tags:
|
|
- Project
|
|
summary: Get projects
|
|
description: Retrieves a paginated list of projects filtered by village, group, status, and search term
|
|
parameters:
|
|
- name: desa
|
|
in: query
|
|
required: true
|
|
description: Village ID
|
|
schema:
|
|
type: string
|
|
- name: group
|
|
in: query
|
|
description: Filter by group ID
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: status
|
|
in: query
|
|
description: Filter by project status
|
|
schema:
|
|
type: string
|
|
enum: [segera, dikerjakan, selesai, batal]
|
|
nullable: true
|
|
- name: search
|
|
in: query
|
|
description: Search term for project title or description
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: page
|
|
in: query
|
|
description: Page number for pagination
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 1
|
|
- name: perPage
|
|
in: query
|
|
description: Number of items per page
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 10
|
|
responses:
|
|
"200":
|
|
description: List of projects
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/BaseResponseProjectList"
|
|
"400":
|
|
description: Bad request (e.g., invalid parameters)
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
/project/{id}:
|
|
get:
|
|
tags:
|
|
- Project
|
|
summary: Get project details
|
|
description: Retrieves details of a specific project based on category (data, task, file, member, or link)
|
|
parameters:
|
|
- name: id
|
|
in: path
|
|
required: true
|
|
description: Project ID
|
|
schema:
|
|
type: string
|
|
- name: cat
|
|
in: query
|
|
required: true
|
|
description: Category of project data to retrieve
|
|
schema:
|
|
type: string
|
|
enum: [data, task, file, member, link]
|
|
responses:
|
|
"200":
|
|
description: Project details
|
|
content:
|
|
application/json:
|
|
schema:
|
|
oneOf:
|
|
- $ref: "#/components/schemas/BaseResponseProjectDetail"
|
|
- $ref: "#/components/schemas/BaseResponseTaskList"
|
|
- $ref: "#/components/schemas/BaseResponseFileList"
|
|
- $ref: "#/components/schemas/BaseResponseMemberList"
|
|
- $ref: "#/components/schemas/BaseResponseLinkList"
|
|
"400":
|
|
description: Bad request (e.g., invalid parameters)
|
|
"404":
|
|
description: Project not found
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
# Task
|
|
/task:
|
|
get:
|
|
tags:
|
|
- Task
|
|
summary: Get tasks
|
|
description: Retrieves a paginated list of tasks filtered by village, division, status, and search term
|
|
parameters:
|
|
- name: desa
|
|
in: query
|
|
required: true
|
|
description: Village ID
|
|
schema:
|
|
type: string
|
|
- name: division
|
|
in: query
|
|
description: Filter by division ID
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: status
|
|
in: query
|
|
description: Filter by task status
|
|
schema:
|
|
type: string
|
|
enum: [segera, dikerjakan, selesai, batal]
|
|
nullable: true
|
|
- name: search
|
|
in: query
|
|
description: Search term for task title or description
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: page
|
|
in: query
|
|
description: Page number for pagination
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 1
|
|
- name: perPage
|
|
in: query
|
|
description: Number of items per page
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 10
|
|
responses:
|
|
"200":
|
|
description: List of tasks
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/BaseResponseTaskList"
|
|
"400":
|
|
description: Bad request (e.g., invalid parameters)
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
/task/{id}:
|
|
get:
|
|
tags:
|
|
- Task
|
|
summary: Get task details
|
|
description: Retrieves details of a specific task based on category (data, task, file, member, or link)
|
|
parameters:
|
|
- name: id
|
|
in: path
|
|
required: true
|
|
description: Task ID
|
|
schema:
|
|
type: string
|
|
- name: cat
|
|
in: query
|
|
required: true
|
|
description: Category of task data to retrieve
|
|
schema:
|
|
type: string
|
|
enum: [data, task, file, member, link]
|
|
responses:
|
|
"200":
|
|
description: Task details
|
|
content:
|
|
application/json:
|
|
schema:
|
|
oneOf:
|
|
- $ref: "#/components/schemas/BaseResponseTaskDetail"
|
|
- $ref: "#/components/schemas/BaseResponseSubTaskList"
|
|
- $ref: "#/components/schemas/BaseResponseFileList"
|
|
- $ref: "#/components/schemas/BaseResponseMemberList"
|
|
- $ref: "#/components/schemas/BaseResponseLinkList"
|
|
"400":
|
|
description: Bad request (e.g., invalid parameters)
|
|
"404":
|
|
description: Task not found
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
# User
|
|
/user:
|
|
get:
|
|
tags:
|
|
- User
|
|
summary: Get users
|
|
description: Retrieves a paginated list of users filtered by village, group, search term, and active status
|
|
parameters:
|
|
- name: desa
|
|
in: query
|
|
required: true
|
|
description: Village ID
|
|
schema:
|
|
type: string
|
|
- name: group
|
|
in: query
|
|
description: Filter by group ID
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: search
|
|
in: query
|
|
description: Search term for user name
|
|
schema:
|
|
type: string
|
|
nullable: true
|
|
- name: active
|
|
in: query
|
|
description: Filter by active status
|
|
schema:
|
|
type: boolean
|
|
nullable: true
|
|
- name: page
|
|
in: query
|
|
description: Page number for pagination
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 1
|
|
- name: perPage
|
|
in: query
|
|
description: Number of items per page
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 10
|
|
responses:
|
|
"200":
|
|
description: List of users
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/UserListResponse"
|
|
"400":
|
|
description: Bad request (e.g., invalid parameters)
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
/user/{id}:
|
|
get:
|
|
tags:
|
|
- User
|
|
summary: Get user details
|
|
description: Retrieves details of a specific user
|
|
parameters:
|
|
- name: id
|
|
in: path
|
|
required: true
|
|
description: User ID
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: User details
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/UserDetailResponse"
|
|
"404":
|
|
description: User not found
|
|
"401":
|
|
description: Unauthorized (invalid or missing token)
|
|
"500":
|
|
description: Internal server error
|
|
|
|
security:
|
|
- bearerAuth: []
|
|
|
|
tags:
|
|
- name: Announcement
|
|
description: Operations related to announcements
|
|
- name: Banner
|
|
description: Operations related to banner management
|
|
- name: Calendar
|
|
description: Operations related to calendar events
|
|
- name: Discussion
|
|
description: Operations related to division-specific discussions
|
|
- name: DiscussionGeneral
|
|
description: Operations related to general discussions
|
|
- name: Division
|
|
description: Operations related to division management and reports
|
|
- name: Document
|
|
description: Operations related to document and folder management
|
|
- name: Group
|
|
description: Operations related to group management
|
|
- name: Position
|
|
description: Operations related to position management
|
|
- name: Project
|
|
description: Operations related to project management
|
|
- name: Task
|
|
description: Operations related to task management
|
|
- name: User
|
|
description: Operations related to user managementØ
|