feat(noc): implement sync management UI and backend integration

This commit is contained in:
2026-03-30 14:48:47 +08:00
parent 3125bc1002
commit 65844bac7e
28 changed files with 2558 additions and 1339 deletions

View File

@@ -36,6 +36,134 @@ export interface paths {
patch?: never;
trace?: never;
};
"/api/noc/sync": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
post: operations["postApiNocSync"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/last-sync": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["getApiNocLast-sync"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/active-divisions": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["getApiNocActive-divisions"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/latest-projects": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["getApiNocLatest-projects"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/upcoming-events": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["getApiNocUpcoming-events"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/diagram-jumlah-document": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["getApiNocDiagram-jumlah-document"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/diagram-progres-kegiatan": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["getApiNocDiagram-progres-kegiatan"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/latest-discussion": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["getApiNocLatest-discussion"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/apikey/": {
parameters: {
query?: never;
@@ -457,102 +585,6 @@ export interface paths {
patch?: never;
trace?: never;
};
"/api/noc/active-divisions": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["getApiNocActive-divisions"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/latest-projects": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["getApiNocLatest-projects"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/upcoming-events": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["getApiNocUpcoming-events"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/diagram-jumlah-document": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["getApiNocDiagram-jumlah-document"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/diagram-progres-kegiatan": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["getApiNocDiagram-progres-kegiatan"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/latest-discussion": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["getApiNocLatest-discussion"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
}
export type webhooks = Record<string, never>;
export interface components {
@@ -619,6 +651,362 @@ export interface operations {
};
};
};
postApiNocSync: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
success: boolean;
message?: string;
error?: string;
lastSyncedAt?: string;
};
"multipart/form-data": {
success: boolean;
message?: string;
error?: string;
lastSyncedAt?: string;
};
"text/plain": {
success: boolean;
message?: string;
error?: string;
lastSyncedAt?: string;
};
};
};
401: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
error: string;
};
"multipart/form-data": {
error: string;
};
"text/plain": {
error: string;
};
};
};
};
};
"getApiNocLast-sync": {
parameters: {
query: {
idDesa: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
lastSyncedAt: (string | null) | null;
};
"multipart/form-data": {
lastSyncedAt: (string | null) | null;
};
"text/plain": {
lastSyncedAt: (string | null) | null;
};
};
};
};
};
"getApiNocActive-divisions": {
parameters: {
query: {
idDesa: string;
limit?: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
data: {
id: string;
name: string;
activityCount: number;
color: string;
}[];
};
"multipart/form-data": {
data: {
id: string;
name: string;
activityCount: number;
color: string;
}[];
};
"text/plain": {
data: {
id: string;
name: string;
activityCount: number;
color: string;
}[];
};
};
};
};
};
"getApiNocLatest-projects": {
parameters: {
query: {
idDesa: string;
limit?: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
data: {
id: string;
title: string;
status: string;
progress: number;
divisionName: string;
createdAt: string;
}[];
};
"multipart/form-data": {
data: {
id: string;
title: string;
status: string;
progress: number;
divisionName: string;
createdAt: string;
}[];
};
"text/plain": {
data: {
id: string;
title: string;
status: string;
progress: number;
divisionName: string;
createdAt: string;
}[];
};
};
};
};
};
"getApiNocUpcoming-events": {
parameters: {
query: {
idDesa: string;
limit?: string;
filter?: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
data: {
id: string;
title: string;
startDate: string;
location: (string | null) | null;
eventType: string;
}[];
};
"multipart/form-data": {
data: {
id: string;
title: string;
startDate: string;
location: (string | null) | null;
eventType: string;
}[];
};
"text/plain": {
data: {
id: string;
title: string;
startDate: string;
location: (string | null) | null;
eventType: string;
}[];
};
};
};
};
};
"getApiNocDiagram-jumlah-document": {
parameters: {
query: {
idDesa: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
data: {
category: string;
count: number;
}[];
};
"multipart/form-data": {
data: {
category: string;
count: number;
}[];
};
"text/plain": {
data: {
category: string;
count: number;
}[];
};
};
};
};
};
"getApiNocDiagram-progres-kegiatan": {
parameters: {
query: {
idDesa: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
data: {
status: string;
avgProgress: number;
count: number;
}[];
};
"multipart/form-data": {
data: {
status: string;
avgProgress: number;
count: number;
}[];
};
"text/plain": {
data: {
status: string;
avgProgress: number;
count: number;
}[];
};
};
};
};
};
"getApiNocLatest-discussion": {
parameters: {
query: {
idDesa: string;
limit?: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
data: {
id: string;
message: string;
senderName: string;
senderImage: (string | null) | null;
divisionName: string;
createdAt: string;
}[];
};
"multipart/form-data": {
data: {
id: string;
message: string;
senderName: string;
senderImage: (string | null) | null;
divisionName: string;
createdAt: string;
}[];
};
"text/plain": {
data: {
id: string;
message: string;
senderName: string;
senderImage: (string | null) | null;
divisionName: string;
createdAt: string;
}[];
};
};
};
};
};
getApiApikey: {
parameters: {
query?: never;
@@ -2070,279 +2458,4 @@ export interface operations {
};
};
};
"getApiNocActive-divisions": {
parameters: {
query: {
idDesa: string;
limit?: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
data: {
id: string;
name: string;
activityCount: number;
color: string;
}[];
};
"multipart/form-data": {
data: {
id: string;
name: string;
activityCount: number;
color: string;
}[];
};
"text/plain": {
data: {
id: string;
name: string;
activityCount: number;
color: string;
}[];
};
};
};
};
};
"getApiNocLatest-projects": {
parameters: {
query: {
idDesa: string;
limit?: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
data: {
id: string;
title: string;
status: string;
progress: number;
divisionName: string;
createdAt: string;
}[];
};
"multipart/form-data": {
data: {
id: string;
title: string;
status: string;
progress: number;
divisionName: string;
createdAt: string;
}[];
};
"text/plain": {
data: {
id: string;
title: string;
status: string;
progress: number;
divisionName: string;
createdAt: string;
}[];
};
};
};
};
};
"getApiNocUpcoming-events": {
parameters: {
query: {
idDesa: string;
limit?: string;
filter?: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
data: {
id: string;
title: string;
startDate: string;
location: (string | null) | null;
eventType: string;
}[];
};
"multipart/form-data": {
data: {
id: string;
title: string;
startDate: string;
location: (string | null) | null;
eventType: string;
}[];
};
"text/plain": {
data: {
id: string;
title: string;
startDate: string;
location: (string | null) | null;
eventType: string;
}[];
};
};
};
};
};
"getApiNocDiagram-jumlah-document": {
parameters: {
query: {
idDesa: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
data: {
category: string;
count: number;
}[];
};
"multipart/form-data": {
data: {
category: string;
count: number;
}[];
};
"text/plain": {
data: {
category: string;
count: number;
}[];
};
};
};
};
};
"getApiNocDiagram-progres-kegiatan": {
parameters: {
query: {
idDesa: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
data: {
status: string;
avgProgress: number;
count: number;
}[];
};
"multipart/form-data": {
data: {
status: string;
avgProgress: number;
count: number;
}[];
};
"text/plain": {
data: {
status: string;
avgProgress: number;
count: number;
}[];
};
};
};
};
};
"getApiNocLatest-discussion": {
parameters: {
query: {
idDesa: string;
limit?: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
data: {
id: string;
message: string;
senderName: string;
senderImage: (string | null) | null;
divisionName: string;
createdAt: string;
}[];
};
"multipart/form-data": {
data: {
id: string;
message: string;
senderName: string;
senderImage: (string | null) | null;
divisionName: string;
createdAt: string;
}[];
};
"text/plain": {
data: {
id: string;
message: string;
senderName: string;
senderImage: (string | null) | null;
divisionName: string;
createdAt: string;
}[];
};
};
};
};
};
}

269
generated/noc-external.ts Normal file
View File

@@ -0,0 +1,269 @@
/**
* This file was auto-generated by openapi-typescript.
* Do not make direct changes to the file.
*/
export interface paths {
"/api/noc/active-divisions": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Divisi Teraktif
* @description Menu Beranda - Mendapatkan daftar divisi teraktif berdasarkan jumlah proyek pada desa tertentu.
*/
get: operations["getApiNocActive-divisions"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/latest-projects": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Latest Projects General
* @description Menu kinerja divisi - Mendapatkan daftar proyek umum terbaru dari berbagai grup pada desa tertentu.
*/
get: operations["getApiNocLatest-projects"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/upcoming-events": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Events (Today & Upcoming)
* @description Menu beranda dan kinerja divisi - Mendapatkan daftar event pada hari ini dan yang akan datang untuk semua divisi pada desa tertentu.
*/
get: operations["getApiNocUpcoming-events"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/diagram-jumlah-document": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Diagram Jumlah Document
* @description Menu kinerja divisi - Mendapatkan diagram jumlah document pada desa tertentu.
*/
get: operations["getApiNocDiagram-jumlah-document"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/diagram-progres-kegiatan": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Diagram Progres Kegiatan
* @description Menu kinerja divisi - Mendapatkan diagram progres kegiatan pada desa tertentu.
*/
get: operations["getApiNocDiagram-progres-kegiatan"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/noc/latest-discussion": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Latest Discussion
* @description Menu kinerja divisi - Mendapatkan latest discussion pada desa tertentu.
*/
get: operations["getApiNocLatest-discussion"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
}
export type webhooks = Record<string, never>;
export interface components {
schemas: never;
responses: never;
parameters: never;
requestBodies: never;
headers: never;
pathItems: never;
}
export type $defs = Record<string, never>;
export interface operations {
"getApiNocActive-divisions": {
parameters: {
query: {
/** @description ID Desa yang ingin dicari */
idDesa: string;
/** @description Jumlah maksimal data (default: 5) */
limit?: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
"getApiNocLatest-projects": {
parameters: {
query: {
/** @description ID Desa yang ingin dicari */
idDesa: string;
/** @description Jumlah maksimal proyek (default: 5, maks: 50) */
limit?: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
"getApiNocUpcoming-events": {
parameters: {
query: {
/** @description ID Desa yang ingin dicari */
idDesa: string;
/** @description Jumlah maksimal event (default: 10, maks: 50) */
limit?: string;
/** @description Filter event: 'today' atau 'upcoming' */
filter?: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
"getApiNocDiagram-jumlah-document": {
parameters: {
query: {
/** @description ID Desa yang ingin dicari */
idDesa: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
"getApiNocDiagram-progres-kegiatan": {
parameters: {
query: {
/** @description ID Desa yang ingin dicari */
idDesa: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
"getApiNocLatest-discussion": {
parameters: {
query: {
/** @description ID Desa yang ingin dicari */
idDesa: string;
/** @description Limit data */
limit?: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
}

File diff suppressed because it is too large Load Diff