Hi everyone, I’m new to the forum, could someone explain to me how to refactor a custom controller from version 3 to 4 of strapi.
What I’m trying to do is via a ‘patch’ request from react that takes the ‘code’ of a transaction, if the payment is successful, the order created in the ui (backend) of strapi is changed from 'status “payment_required” to status “paid”
My code:
// OLD VERSION CONTROLLER STRAPI - v3
// src/api/order/controllers/order.js
// "use strict";
// const { sanitizeEntity } = require("strapi-utils");
// module.exports = {
// search by code param
// async findOne(ctx) {
// const { code } = ctx.params;
// const order = await strapi.services.order.findOne({ code });
// return sanitizeEntity(order, { model: strapi.models.order });
// },
// async updateOrderStatus(ctx) {
// update id order and status order from 'payment
// const { code } = ctx.params;
// const order = await strapi.services.order.findOne({ code });
// await strapi.services.order.update({ id: order.id }, { status: "payed" });
// return { success: true };
// },
// };
// @ts-nocheck
"use strict";
const order = require("../routes/order");
/**
* order controller
* setting controller custom docs: https://docs.strapi.io/developer-docs/latest/development/backend-customization/controllers.html#implementation
update: https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/entity-service/crud.html#update
*/
const { createCoreController } = require("@strapi/strapi").factories;
module.exports = createCoreController("api::order.order", ({ strapi }) => ({
// WORK FINE!
async findOne(ctx) {
const { code } = ctx.params;
const query = {
filters: { code },
...ctx.query,
};
const order = await strapi.entityService.findMany(
"api::order.order",
query
);
const sanitizedEntity = await this.sanitizeOutput(order);
return this.transformResponse(sanitizedEntity[0]);
},
// DON'T WORK!!!
async updateOrderStatusTest(ctx) {
// update order status
try {
const { code } = ctx.params;
const query = {
filters: { code },
...ctx.query,
};
const order = await strapi.entityService.findMany(
"api::order.order",
query
);
// update order logic
await strapi.services["order"]
.update({ id: order.id }, { status: "payed" })
.then(() => {
return {
success: true,
};
});
} catch (error) {
ctx.body = error;
}
},```