| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- const API = require('../../../lib/API.js')
- const db = require('../../../plugin/DataBase/db.js')
- const { BaseStdResponse } = require('../../../BaseStdResponse.js')
- const AccessControl = require('../../../lib/AccessControl.js')
- class ListCoupons extends API {
- constructor() {
- super()
- this.setPath('/Admin/Coupon/List')
- this.setMethod('GET')
- }
- async onRequest(req, res) {
- const { uuid, session, pagesize, current, keyword, state } = req.query
- if ([uuid, session, pagesize, current].some((v) => v === '' || v == null)) {
- return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
- }
- if (!(await AccessControl.checkSession(uuid, session))) {
- return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
- }
- const permission = await AccessControl.getPermission(uuid)
- if (!permission.includes('admin') && !permission.includes('product')) {
- return res.json({ ...BaseStdResponse.PERMISSION_DENIED })
- }
- const pageSize = Math.max(1, Number(pagesize))
- const page = Math.max(1, Number(current))
- const offset = (page - 1) * pageSize
- let sql = `SELECT * FROM coupons WHERE 1=1`
- let countSql = `SELECT COUNT(*) AS total FROM coupons WHERE 1=1`
- const params = []
- const countParams = []
- if (keyword) {
- sql += ` AND (code LIKE ? OR name LIKE ?)`
- countSql += ` AND (code LIKE ? OR name LIKE ?)`
- const kw = `%${keyword}%`
- params.push(kw, kw)
- countParams.push(kw, kw)
- }
- const stateNum = Number(state)
- if (
- state !== undefined &&
- state !== '' &&
- state !== '-1' &&
- !Number.isNaN(stateNum) &&
- stateNum !== -1
- ) {
- sql += ` AND state = ?`
- countSql += ` AND state = ?`
- params.push(stateNum)
- countParams.push(stateNum)
- }
- sql += ` ORDER BY id DESC LIMIT ? OFFSET ?`
- params.push(String(pageSize), String(offset))
- const rows = await db.query(sql, params)
- const countResult = await db.query(countSql, countParams)
- const total = Number(countResult?.[0]?.total || 0)
- return res.json({
- ...BaseStdResponse.OK,
- data: rows || [],
- pagination: {
- current: page,
- pagesize: pageSize,
- total,
- totalPages: Math.ceil(total / pageSize)
- }
- })
- }
- }
- module.exports.ListCoupons = ListCoupons
|