feat: create model for storing WhatsApp Official API usage and add controller to handle API consumption data
parent
5c81ae2513
commit
0c387a350b
|
@ -9,6 +9,7 @@ const billingSumUsage = require("../utils/billingSumUsage.js")
|
|||
const moment = require('moment')
|
||||
const API_Call = require("../models/API_Call.js")
|
||||
const API_Operation = require("../models/API_Operation.js")
|
||||
const API_Usage_Whatsapp = require("../models/API_Usage_Whatsapp.js")
|
||||
|
||||
const setApiPricing = async (req, res) => {
|
||||
|
||||
|
@ -23,7 +24,12 @@ const setApiPricing = async (req, res) => {
|
|||
const normalizedProvider = provider.trim().toLowerCase()
|
||||
const normalizedProduct = product.trim().toLowerCase()
|
||||
|
||||
const filter = { provider: normalizedProvider, product: normalizedProduct }
|
||||
let filter = { provider: normalizedProvider, product: normalizedProduct }
|
||||
|
||||
if (type) {
|
||||
filter = { ...filter, type }
|
||||
}
|
||||
|
||||
const update = {
|
||||
provider: normalizedProvider,
|
||||
product: normalizedProduct,
|
||||
|
@ -90,6 +96,60 @@ const registerUsage = async (req, res) => {
|
|||
|
||||
}
|
||||
|
||||
const registerWhatsappUsage = async (req, res) => {
|
||||
const {
|
||||
companyId,
|
||||
provider,
|
||||
product,
|
||||
type,
|
||||
msgId,
|
||||
ticketId,
|
||||
billable,
|
||||
pricing_model,
|
||||
} = req.body
|
||||
|
||||
mustContainProperties(req, [
|
||||
'companyId',
|
||||
'provider',
|
||||
'product',
|
||||
'type',
|
||||
'msgId',
|
||||
'ticketId',
|
||||
'billable',
|
||||
'pricing_model'
|
||||
])
|
||||
|
||||
const apiPricing = await API_Pricing.findOne({
|
||||
provider: provider.trim().toLowerCase(),
|
||||
product: product.trim().toLowerCase(),
|
||||
type: type.trim().toLowerCase(),
|
||||
})
|
||||
|
||||
|
||||
if (apiPricing) {
|
||||
|
||||
const { price } = apiPricing
|
||||
|
||||
const apiUsageWhatsapp = await API_Usage_Whatsapp.create({
|
||||
companyId,
|
||||
provider: provider.trim().toLowerCase(),
|
||||
product: product.trim().toLowerCase(),
|
||||
price,
|
||||
msgId,
|
||||
ticketId,
|
||||
billable,
|
||||
pricing_model,
|
||||
type
|
||||
})
|
||||
|
||||
return res.status(StatusCodes.OK).json({ apiUsageWhatsapp })
|
||||
|
||||
}
|
||||
|
||||
res.status(StatusCodes.NOT_FOUND).json({ msg: `Price not found for ${product} in the API Pricing table` })
|
||||
|
||||
}
|
||||
|
||||
const registerAPICall = async (req, res) => {
|
||||
const {
|
||||
callerId,
|
||||
|
@ -255,5 +315,6 @@ module.exports = {
|
|||
registerAPICall,
|
||||
registerOperation,
|
||||
getUsage,
|
||||
registerAll
|
||||
registerAll,
|
||||
registerWhatsappUsage
|
||||
}
|
|
@ -22,7 +22,7 @@ const apiPricing = new Schema({
|
|||
},
|
||||
billingBy:{
|
||||
type: String,
|
||||
enum: ['minute', 'character', 'token', 'second'],
|
||||
enum: ['minute', 'character', 'token', 'second', 'hour'],
|
||||
required: true,
|
||||
},
|
||||
billingUnit:{
|
||||
|
@ -31,7 +31,6 @@ const apiPricing = new Schema({
|
|||
},
|
||||
type: {
|
||||
type: String,
|
||||
enum: ['input', 'output',],
|
||||
}
|
||||
|
||||
}, { timestamps: true })
|
||||
|
|
|
@ -15,33 +15,6 @@ const apiUsage = new Schema({
|
|||
type: String,
|
||||
required: true,
|
||||
},
|
||||
// quantityOfOperationAttempts: {
|
||||
// type: String,
|
||||
// required: true,
|
||||
// },
|
||||
// chosenOperation: {
|
||||
// type: String,
|
||||
// required: true,
|
||||
// },
|
||||
// requestLogsOpenAI: {
|
||||
// type: String,
|
||||
// required: true,
|
||||
// },
|
||||
// responseErrorLogsOpenAI: {
|
||||
// type: String,
|
||||
// },
|
||||
// quantityOfCallsToFalconFlowAPI: {
|
||||
// type: String,
|
||||
// required: true,
|
||||
// },
|
||||
// requestLogsFalconFlowAPI: {
|
||||
// type: String,
|
||||
// required: true,
|
||||
// },
|
||||
// responseErrorLogsFalconFlowAPI: {
|
||||
// type: String,
|
||||
// required: true,
|
||||
// },
|
||||
provider: {
|
||||
type: String,
|
||||
required: true,
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
const mongoose = require('../db/connect')
|
||||
|
||||
const { Schema } = mongoose
|
||||
|
||||
const apiUsageWhatsapp = new Schema({
|
||||
companyId: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
msgId: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
ticketId: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
provider: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
product: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
price: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
billable: {
|
||||
type: Boolean,
|
||||
require: true
|
||||
},
|
||||
pricing_model: {
|
||||
type: String,
|
||||
default: true
|
||||
},
|
||||
type: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
|
||||
}, { timestamps: true })
|
||||
|
||||
const API_Usage_Whatsapp = mongoose.model('API_Usage_Whatsapp', apiUsageWhatsapp)
|
||||
|
||||
module.exports = API_Usage_Whatsapp
|
|
@ -1,10 +1,17 @@
|
|||
const express = require('express')
|
||||
const router = express.Router()
|
||||
const { authorization, } = require('../middleware/authentication')
|
||||
const { setApiPricing, registerUsage, getUsage, registerAPICall, registerOperation, registerAll} = require('../controllers/apiUsagePricing')
|
||||
const { setApiPricing,
|
||||
registerUsage,
|
||||
getUsage,
|
||||
registerAPICall,
|
||||
registerOperation,
|
||||
registerAll,
|
||||
registerWhatsappUsage} = require('../controllers/apiUsagePricing')
|
||||
|
||||
router.route('/create').post(authorization, setApiPricing)
|
||||
router.route('/usage').post(authorization, registerUsage)
|
||||
router.route('/usage-whatsapp').post(authorization, registerWhatsappUsage)
|
||||
router.route('/report').post(authorization, getUsage)
|
||||
router.route('/api-call').post(authorization, registerAPICall)
|
||||
router.route('/api-operation').post(authorization, registerOperation)
|
||||
|
|
Loading…
Reference in New Issue