feat: create model for storing WhatsApp Official API usage and add controller to handle API consumption data

main
adriano 2024-08-09 10:39:04 -03:00
parent 5c81ae2513
commit 0c387a350b
5 changed files with 129 additions and 42 deletions

View File

@ -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
}

View File

@ -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 })

View File

@ -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,

View File

@ -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

View File

@ -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)