198 lines
6.0 KiB
TypeScript
198 lines
6.0 KiB
TypeScript
import { Body, Controller, Get, HttpCode, Param, Post, Put } from '@nestjs/common';
|
|
import { AdminCustomersService, type OmdeScope } from './admin-customers.service';
|
|
import { TableQueryDto } from '../admin-table/table-query.dto';
|
|
import { CurrentAdmin, RequirePermission } from '../auth/guards';
|
|
import type { AuthenticatedAdmin } from '../auth/jwt.strategy';
|
|
|
|
/**
|
|
* Wholesale customer lists. Legacy endpoints, one per near-identical view:
|
|
* POST customer -> OmdeList
|
|
* POST banker -> BankerList
|
|
* POST shopkeeper -> ShopkeeperList
|
|
* POST major/verify/table -> OmdeNonVerifiedList
|
|
* POST major/archive/table -> OmdeArchivedList
|
|
* POST customer/toggle-active, customer/toggle-sts, major/verify
|
|
* GET major/archive/{id}, major/dashboard/{id}
|
|
*/
|
|
@Controller('admin/customers-omde')
|
|
export class AdminCustomersController {
|
|
constructor(private readonly customers: AdminCustomersService) {}
|
|
|
|
private list(query: TableQueryDto, scope: OmdeScope) {
|
|
return this.customers.list(query, scope);
|
|
}
|
|
|
|
@Post('list')
|
|
@HttpCode(200)
|
|
@RequirePermission('persons.list.client.omde')
|
|
listAll(@Body() query: TableQueryDto) {
|
|
return this.list(query, 'all');
|
|
}
|
|
|
|
@Post('banker/list')
|
|
@HttpCode(200)
|
|
@RequirePermission('persons.list.client.omde')
|
|
listBanker(@Body() query: TableQueryDto) {
|
|
return this.list(query, 'banker');
|
|
}
|
|
|
|
@Post('shopkeeper/list')
|
|
@HttpCode(200)
|
|
@RequirePermission('persons.list.client.omde')
|
|
listShopkeeper(@Body() query: TableQueryDto) {
|
|
return this.list(query, 'shopkeeper');
|
|
}
|
|
|
|
@Post('non-verified/list')
|
|
@HttpCode(200)
|
|
@RequirePermission('persons.list.client.omde')
|
|
listNonVerified(@Body() query: TableQueryDto) {
|
|
return this.list(query, 'non_verified');
|
|
}
|
|
|
|
@Post('archived/list')
|
|
@HttpCode(200)
|
|
@RequirePermission('persons.list.client.omde')
|
|
listArchived(@Body() query: TableQueryDto) {
|
|
return this.list(query, 'archived');
|
|
}
|
|
|
|
/** Legacy POST single-customer — the retail customer list. */
|
|
@Post('single/list')
|
|
@HttpCode(200)
|
|
@RequirePermission('persons.list.client.single')
|
|
listSingle(@Body() query: TableQueryDto, @CurrentAdmin() admin: AuthenticatedAdmin) {
|
|
return this.customers.listSingle(query, admin.branchId ?? undefined);
|
|
}
|
|
|
|
/** Legacy `POST single` — singleCustomer.vue, the retail customer form. */
|
|
@Post('single')
|
|
@HttpCode(200)
|
|
@RequirePermission('persons.create')
|
|
createSingle(@Body() data: Record<string, unknown>) {
|
|
return this.customers.createSingle(data);
|
|
}
|
|
|
|
/**
|
|
* Legacy `GET query/reagent` — the sales-expert picker used by the customer
|
|
* form. Returns a plain array of {id, name}, as legacy did.
|
|
*/
|
|
@Get('query/reagent')
|
|
@RequirePermission('persons.create')
|
|
queryReagents() {
|
|
return this.customers.queryReagents();
|
|
}
|
|
|
|
/** Legacy POST wallet/charge. */
|
|
@Post('wallet/charge')
|
|
@HttpCode(200)
|
|
@RequirePermission('wallet')
|
|
chargeWallet(@Body() body: { customer_id: string; value: string | number }) {
|
|
return this.customers.chargeWallet(body);
|
|
}
|
|
|
|
@Post('create')
|
|
@HttpCode(200)
|
|
@RequirePermission('persons.create')
|
|
create(@Body() data: Record<string, unknown>) {
|
|
return this.customers.create(data);
|
|
}
|
|
|
|
@Put(':id')
|
|
@RequirePermission('persons.list.client.omde.edit')
|
|
update(@Param('id') id: string, @Body() data: Record<string, unknown>) {
|
|
return this.customers.update(id, data);
|
|
}
|
|
|
|
/** Legacy POST reagent — the sales-expert list. */
|
|
@Post('reagent/list')
|
|
@HttpCode(200)
|
|
@RequirePermission('persons.list.sellers')
|
|
listReagents(@Body() query: TableQueryDto) {
|
|
return this.customers.listReagents(query);
|
|
}
|
|
|
|
/** A sales agent's own detail screen — see reagentDetail()'s header comment. */
|
|
@Get('reagent/:id')
|
|
@RequirePermission('persons.list.sellers.view')
|
|
reagentDetail(@Param('id') id: string) {
|
|
return this.customers.reagentDetail(id);
|
|
}
|
|
|
|
/** Legacy `GET single/order/{id}` — that customer's orders. */
|
|
@Get(':id/orders')
|
|
@RequirePermission('persons.list.client.omde.view.orders')
|
|
customerOrders(@Param('id') id: string) {
|
|
return this.customers.customerOrders(id);
|
|
}
|
|
|
|
/** Legacy `GET single/report/{id}` — that customer's ledger documents. */
|
|
@Get(':id/documents')
|
|
@RequirePermission('persons.list.client.omde.view.documents')
|
|
customerDocuments(@Param('id') id: string) {
|
|
return this.customers.customerDocuments(id);
|
|
}
|
|
|
|
/** Legacy `GET single/wallet/{id}` — that customer's wallet bonuses. */
|
|
@Get(':id/wallet')
|
|
@RequirePermission('wallet')
|
|
customerWallet(@Param('id') id: string) {
|
|
return this.customers.customerWallet(id);
|
|
}
|
|
|
|
@Get('dashboard/:id')
|
|
@RequirePermission('persons.list.client.omde.view')
|
|
dashboard(@Param('id') id: string) {
|
|
return this.customers.dashboard(id);
|
|
}
|
|
|
|
@Get('archive/:id')
|
|
@RequirePermission('persons.list.client.omde.edit')
|
|
toggleArchive(@Param('id') id: string) {
|
|
return this.customers.toggleArchive(id);
|
|
}
|
|
|
|
@Post('toggle-active')
|
|
@HttpCode(200)
|
|
@RequirePermission('persons.list.client.omde.edit')
|
|
toggleActive(@Body() body: { id: string }) {
|
|
return this.customers.toggleActive(body.id);
|
|
}
|
|
|
|
@Post('toggle-sts')
|
|
@HttpCode(200)
|
|
@RequirePermission('persons.list.client.omde.edit')
|
|
toggleSts(@Body() body: { id: string }) {
|
|
return this.customers.toggleSts(body.id);
|
|
}
|
|
|
|
@Post('verify')
|
|
@HttpCode(200)
|
|
@RequirePermission('persons.list.client.omde.edit')
|
|
verify(
|
|
@Body()
|
|
body: {
|
|
customer_id: string;
|
|
sts_verify_step_one?: number;
|
|
sts_verify_step_two?: number;
|
|
/** Optional, only read on a reject. */
|
|
reason?: string | null;
|
|
},
|
|
) {
|
|
return this.customers.verify(body);
|
|
}
|
|
|
|
@Post('credit')
|
|
@HttpCode(200)
|
|
@RequirePermission('persons.list.client.omde.edit')
|
|
updateCredit(@Body() body: { id: string; gram_level?: string; percent?: string }) {
|
|
return this.customers.updateCredit(body.id, body);
|
|
}
|
|
|
|
@Get(':id')
|
|
@RequirePermission('persons.list.client.omde.view')
|
|
findOne(@Param('id') id: string) {
|
|
return this.customers.findOne(id);
|
|
}
|
|
}
|