import OBACore from "@onebro/oba-core"; import {ModelController} from "@onebro/oba-mongoose"; import {UserRoles,OrderSignature} from "../00-model-types"; import {ModelFactories,OrderFactory} from "../01-model-factories"; import OB from "@onebro/oba-common"; export interface OrderController extends ModelController {} export class OrderController extends ModelController { constructor(public api:OBACore,public factories:ModelFactories){ super(api as any); this.badStatuses = ["Deleted"]; this.privileges = ["use-api"]; this.adminRoles = ["ADMIN","SUPER","_SA_"]; const orders = factories["orders"]; this.create$ = async ({body,appuser:{okto}}) => { return await Promise.resolve() .then(() => this.isAuthed(okto)) .then(async () => await orders.create(body)) .then(o => ({data:o.json()})); }; this.fetch$ = async ({params,appuser:{okto}}) => { return await Promise.resolve() .then(() => this.isAuthed(okto)) .then(async () => await orders.fetch(this.serializeFetch(params))) .then(o => ({data:o.json()})); }; this.update$ = async ({params:{id},body:updates,appuser:{okto}}:any) => { return await Promise.resolve() .then(() => this.isAuthed(okto)) .then(async () => await orders.update(id,updates)) .then(o => ({data:o.json()})); }; this.remove$ = async ({params:{id},appuser:{name,okto,role}}) => { return await Promise.resolve() .then(() => this.isAuthed(okto)) .then(async () => await orders.update(id,{$set:{ status:{name:"Deleted",time:new Date(),info:{user:name,role}} }})) .then(o => ({data:o.json()})); }; this.remove$$ = async ({params:{id,admin},appuser:{okto,role}}) => { return await Promise.resolve() .then(() => this.isAuthed(okto)) .then(() => this.isAdmin(role)) .then(async () => await orders.remove(id)) .then(o => ({data:o.json()})); }; this.query$ = async ({query,appuser:{okto}}) => { return await Promise.resolve() .then(() => this.isAuthed(okto)) .then(async () => await orders.query(this.parseQueryObj(query))) .then(o => ({data:{results:o}})); }; this.search$ = async ({query:{text},appuser:{okto}}) => { return await Promise.resolve() .then(() => this.isAuthed(okto)) .then(async () => await orders.search(text)) .then(o => ({data:{results:o}})); }; } }