Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions cms/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,13 @@ JWT_SECRET=tobemodified
PROJECTS_TOKEN=tobemodified
PROJECTS_ORG=base42
PROJECT_SYNC_SECRET=tobemodified

# Stripe
STRIPE_WEBHOOK_SECRET=tobemodified
STRIPE_MONTHLY_PRICE_ID=tobemodified
STRIPE_YEARLY_PRICE_ID=tobemodified
STRIPE_SUCCESS_URL=https://42.mk/membership/success
STRIPE_CANCEL_URL=https://42.mk/membership/cancel
STRIPE_RETURN_URL=https://42.mk/membership/manage
STRIPE_SECRET_KEY=tobemodified
STRIPE_PRICE_ID=tobemodified
1 change: 1 addition & 0 deletions cms/config/middlewares.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ export default [
'strapi::poweredBy',
'strapi::logger',
'strapi::query',
{ name: 'global::stripe-webhook', config: {} },
'strapi::body',
'strapi::session',
'strapi::favicon',
Expand Down
63 changes: 1 addition & 62 deletions cms/src/api/event-request/controllers/event-request.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,65 +4,4 @@

import { factories } from '@strapi/strapi'

export default factories.createCoreController('api::event-request.event-request', ({ strapi }) => ({
async approve(ctx) {
const user = ctx.state?.user;
if (!user) {
return ctx.unauthorized();
}

const { id } = ctx.params;

const request = (await strapi.documents('api::event-request.event-request').findOne({
documentId: id,
populate: { event: true } as never,
})) as {
documentId: string;
status?: string;
initiatorEmail?: string;
eventName?: string;
event?: { documentId: string } | null;
} | null;

if (!request) {
return ctx.notFound('Event request not found');
}

if (!request.event) {
return ctx.badRequest('No linked draft event found');
}

if (request.status === 'approved') {
return ctx.badRequest('Event request already approved');
}

try {
await strapi.documents('api::event.event').publish({
documentId: request.event.documentId,
});

await strapi.documents('api::event-request.event-request').update({
documentId: id,
data: { status: 'approved' } as Record<string, unknown>,
});

await strapi.plugins['email'].services.email.send({
to: request.initiatorEmail,
from: 'hello@42.mk',
replyTo: 'hello@42.mk',
subject: 'Your event has been approved! - 42.mk',
html: `
<p>Great news! Your event request "<strong>${request.eventName}</strong>" has been approved and is now published.</p>
<p>You can view it on our platform.</p>
<p>Best regards,<br/>42.mk Team</p>
`,
});

ctx.body = { message: 'Event request approved' };
} catch (error) {
strapi.log.error('Error approving event request:', error);
ctx.status = 500;
ctx.body = { error: { message: 'Failed to approve event request' } };
}
},
}));
export default factories.createCoreController('api::event-request.event-request');
4 changes: 3 additions & 1 deletion cms/src/api/event-request/routes/event-request.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { factories } from '@strapi/strapi';

export default factories.createCoreRouter('api::event-request.event-request');
export default {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR removes the custom approve controller method, but routes/custom-event-request.ts still registers POST /event-requests/:id/approve with handler event-request.approve. Strapi validates route handlers at startup, so the server throws "Handler not found" and won't boot. That route file needs to be deleted along with the controller method (the publish middleware in src/middlewares/event-request-approval.ts already covers the approval flow).

routes: [],
};
42 changes: 42 additions & 0 deletions cms/src/api/membership/content-types/membership/schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"kind": "collectionType",
"collectionName": "memberships",
"info": {
"singularName": "membership",
"pluralName": "memberships",
"displayName": "Membership",
"description": "Tracks user membership subscriptions"
},
"options": {
"draftAndPublish": false
},
"pluginOptions": {},
"attributes": {
"user": {
"type": "relation",
"relation": "manyToOne",
"target": "plugin::users-permissions.user",
"inversedBy": "memberships"
},
"tier": {
"type": "enumeration",
"enum": ["monthly", "yearly"],
"required": true
},
"status": {
"type": "enumeration",
"enum": ["active", "inactive", "cancelled", "cancel_pending", "pending"],
"default": "pending"
},
"startDate": {
"type": "datetime"
},
"endDate": {
"type": "datetime"
},
"stripeSubscriptionId": {
"type": "string",
"private": true
}
}
}
Loading