Files
sistem-desa-mandiri/darmasaba-api-ai.yml
2025-09-22 15:31:23 +08:00

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Ø