Merge pull request 'join' (#51) from join into staging

Reviewed-on: bip/sistem-desa-mandiri#51
This commit is contained in:
2025-09-29 10:56:31 +08:00
3 changed files with 134 additions and 25 deletions

View File

@@ -33,19 +33,34 @@ components:
message:
type: string
description: Response message or error description
meta:
type: object
# Village
VillageListResponse:
allOf:
- $ref: "#/components/schemas/BaseResponse"
- 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
data:
type: array
items:
properties:
id:
type: string
description: Unique identifier for the village
name:
type: string
description: Name of the village
isActive:
type: boolean
description: Indicates whether the village is active
createdAt:
type: string
format: date-time
description: Timestamp when the village was created
updatedAt:
type: string
format: date-time
description: Timestamp when the village was last updatedØ
# Banner
BannerBase:
@@ -1393,6 +1408,48 @@ components:
description: Details of a specific user
paths:
# Village
/village:
get:
tags:
- Village
summary: Get list of villages
description: Retrieves a paginated list of villages filtered by search term and active status
parameters:
- name: search
in: query
description: Search term for village 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: get
in: query
description: Number of items per page
schema:
type: integer
minimum: 1
default: 10
responses:
"200":
description: List of villages
content:
application/json:
schema:
$ref: "#/components/schemas/VillageListResponse"
# Announcement
/announcement:
get:
@@ -1420,7 +1477,7 @@ paths:
type: integer
minimum: 1
default: 1
- name: perPage
- name: get
in: query
description: Number of items per page
schema:
@@ -1501,7 +1558,7 @@ paths:
type: integer
minimum: 1
default: 1
- name: perPage
- name: get
in: query
description: Number of items per page
schema:
@@ -1601,7 +1658,7 @@ paths:
type: integer
minimum: 1
default: 1
- name: perPage
- name: get
in: query
description: Number of items per page
schema:
@@ -1695,7 +1752,7 @@ paths:
type: integer
minimum: 1
default: 1
- name: perPage
- name: get
in: query
description: Number of items per page
schema:
@@ -1789,7 +1846,7 @@ paths:
type: integer
minimum: 1
default: 1
- name: perPage
- name: get
in: query
description: Number of items per page
schema:
@@ -1894,7 +1951,7 @@ paths:
type: integer
minimum: 1
default: 1
- name: perPage
- name: get
in: query
description: Number of items per page
schema:
@@ -2058,7 +2115,7 @@ paths:
type: integer
minimum: 1
default: 1
- name: perPage
- name: get
in: query
description: Number of items per page
schema:
@@ -2112,7 +2169,7 @@ paths:
type: integer
minimum: 1
default: 1
- name: perPage
- name: get
in: query
description: Number of items per page
schema:
@@ -2172,7 +2229,7 @@ paths:
type: integer
minimum: 1
default: 1
- name: perPage
- name: get
in: query
description: Number of items per page
schema:
@@ -2233,7 +2290,7 @@ paths:
type: integer
minimum: 1
default: 1
- name: perPage
- name: get
in: query
description: Number of items per page
schema:
@@ -2335,7 +2392,7 @@ paths:
type: integer
minimum: 1
default: 1
- name: perPage
- name: get
in: query
description: Number of items per page
schema:
@@ -2436,7 +2493,7 @@ paths:
type: integer
minimum: 1
default: 1
- name: perPage
- name: get
in: query
description: Number of items per page
schema:
@@ -2488,6 +2545,8 @@ security:
- bearerAuth: []
tags:
- name: Village
description: Operations related to village management
- name: Announcement
description: Operations related to announcements
- name: Banner

View File

@@ -0,0 +1,50 @@
import { prisma } from "@/module/_global";
import _ from "lodash";
import { NextResponse } from "next/server";
export async function GET(request: Request) {
try {
const { searchParams } = new URL(request.url);
const isActive = searchParams.get("active");
const search = searchParams.get('search');
const page = searchParams.get('page')
const get = searchParams.get('get')
let getFix = 10;
if (get == null || get == undefined || get == "" || _.isNaN(Number(get))) {
getFix = 10;
} else {
getFix = Number(get);
}
const dataSkip = page == null || page == undefined ? 0 : Number(page) * getFix - getFix;
const data = await prisma.village.findMany({
skip: dataSkip,
take: getFix,
where: {
isActive: isActive == 'false' ? false : true,
name: {
contains: (search == undefined || search == null) ? "" : search,
mode: "insensitive"
}
},
select: {
id: true,
name: true,
isActive: true,
createdAt: true,
updatedAt: true
},
orderBy: {
name: 'asc'
}
});
return NextResponse.json({ success: true, message: "Berhasil mendapatkan desa", data, }, { status: 200 });
} catch (error) {
console.error(error);
return NextResponse.json({ success: false, message: "Gagal mendapatkan desa, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 });
}
}

View File

@@ -2,7 +2,7 @@ import { NextResponse } from "next/server";
export async function GET(request: Request) {
try {
return NextResponse.json({ success: true, version: "2.0.2", tahap: "beta", update: "-api mobile; -login tanpa otp (mobile app); -tambah laporan pada project dan tugas divisi; -tambah upload link pada project dan tugas divisi; -tambah detail tanggal dan jam pada project dan tugas divisi; -api jenna ai; -privacy policy" }, { status: 200 });
return NextResponse.json({ success: true, version: "2.0.3", tahap: "beta", update: "-api mobile; -login tanpa otp (mobile app); -tambah laporan pada project dan tugas divisi; -tambah upload link pada project dan tugas divisi; -tambah detail tanggal dan jam pada project dan tugas divisi; -api jenna ai; -privacy policy" }, { status: 200 });
} catch (error) {
console.error(error);
return NextResponse.json({ success: false, version: "Gagal mendapatkan version, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 });