Skip to content

Commit

Permalink
Merge pull request #377 from claushaas/dev
Browse files Browse the repository at this point in the history
add reset user subscriptions to admin panel
  • Loading branch information
claushaas authored Oct 24, 2024
2 parents d468d07 + 7fcfe27 commit c375084
Show file tree
Hide file tree
Showing 4 changed files with 210 additions and 141 deletions.
42 changes: 42 additions & 0 deletions app/routes/admin.students.$username.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,16 @@ export const action = async ({request, params}: ActionFunctionArgs) => {
break;
}

case 'subscriptions': {
const {data: user} = await userService.getUserData(username!);

await new SubscriptionService().resetUserSubscriptions(user);

userSession.flash('success', 'Matrículas do aluno resetadas com sucesso');

break;
}

default: {
userSession.flash('error', 'Tipo de formulário inválido');
break;
Expand Down Expand Up @@ -541,6 +551,38 @@ export default function Student() {

<div>
<h2>Matrículas</h2>

<RadixForm.Root asChild>
<Form method='post' action={`/admin/students/${username}`}>

<RadixForm.Field name='id' className='hidden'>
<RadixForm.Control asChild>
<input
disabled={isSubmittingAnyForm}
type='text'
value={studentData.id}
/>
</RadixForm.Control>
</RadixForm.Field>

<RadixForm.Field name='type' className='hidden'>
<RadixForm.Control asChild>
<input
disabled={isSubmittingAnyForm}
type='text'
value='subscriptions'
/>
</RadixForm.Control>
</RadixForm.Field>

<RadixForm.Submit asChild>
<Button isDisabled={isSubmittingAnyForm} text='Resetar Matrículas' preset={ButtonPreset.Secondary} type={ButtonType.Submit}/>
</RadixForm.Submit>

{isSubmittingAnyForm && <YemSpinner/>}
</Form>
</RadixForm.Root>

{subscriptions && (
<ul>
{subscriptions.map(subscription => (
Expand Down
35 changes: 31 additions & 4 deletions app/services/subscription.service.server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,26 @@ export default class SubscriptionService {
};
}

public async resetUserSubscriptions(user: TUser): Promise<TServiceReturn<string>> {
try {
await this._model.userSubscriptions.deleteMany({
where: {
userId: user.id,
},
});

await this.createUserInitialSubscriptions(user);

return {
status: 'NO_CONTENT',
data: 'Subscriptions reset successfully',
};
} catch (error) {
logger.logError(`Error resetting user subscriptions: ${(error as Error).message}`);
throw new CustomError('UNKNOWN', `Error resetting user subscriptions: ${(error as Error).message}`);
}
}

public async getUserSubscriptions(user: TUser): Promise<TServiceReturn<TPrismaPayloadGetUserSubscriptions[] | undefined>> {
try {
const subscriptions = await this._model.userSubscriptions.findMany({
Expand Down Expand Up @@ -172,13 +192,20 @@ export default class SubscriptionService {
try {
const {data: hotmartSubscriptions} = await this._hotmartService.getUserFormationSubscriptions(user);

if (hotmartSubscriptions.length > 0) {
await Promise.all([ // eslint-disable-line unicorn/no-single-promise-in-promise-methods
hotmartSubscriptions.map(async subscription => {
if (hotmartSubscriptions.length > 0 || (hotmartSubscriptions.length === 0 && user.roles?.includes('novaFormacao'))) {
await Promise.all([
hotmartSubscriptions.length > 0 && hotmartSubscriptions.map(async subscription => {
await this.createOrUpdate(subscription);
}),
(hotmartSubscriptions.length === 0 && user.roles?.includes('novaFormacao')) && this.createOrUpdate({
userId: user.id,
courseSlug: convertSubscriptionIdentifierToCourseSlug('1392822'),
provider: 'hotmart',
providerSubscriptionId: `no-hotmart-formation-${user.id}`,
expiresAt: new Date(2_556_113_460_000),
}),
]);
} else if (hotmartSubscriptions.length === 0) {
} else if (hotmartSubscriptions.length === 0 && !user.roles?.includes('novaFormacao')) {
await this.createOrUpdate({
userId: user.id,
courseSlug: convertSubscriptionIdentifierToCourseSlug('1392822'),
Expand Down
Loading

0 comments on commit c375084

Please sign in to comment.