Skip to content

Commit

Permalink
fix: disallow submissions after merge (#261)
Browse files Browse the repository at this point in the history
  • Loading branch information
georgeciubotaru authored Jun 4, 2024
1 parent 5189fb8 commit 826f873
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 14 deletions.
4 changes: 2 additions & 2 deletions src/lib/components/Card/PR.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
/** react-ibles */
$: closedAndNotMerged = !!data.closed_at && !data.merged;
$: submissionApproved = data.submission?.approval === Approval.APPROVED;
$: if (submissionApproved && !isAdmin) isReadonly = true;
$: if ((submissionApproved && !isAdmin) || (data.merged && !isAdmin)) isReadonly = true;
$: data.number = Number(data.url?.split('/').slice(-1));
$: closedAt = data.closed_at ? new Date(data.closed_at) : undefined;
</script>
Expand Down Expand Up @@ -108,7 +108,7 @@
});
}

submissionPayload.owner_id = $page.data.user.id;
submissionPayload.owner_id = data.contributor?.id;
submissionPayload.item_id = data.id;
submissionPayload.experience =
Experience[activeReactionButton === 'left' ? 'POSITIVE' : 'NEGATIVE'];
Expand Down
4 changes: 2 additions & 2 deletions src/lib/components/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import type {
HTMLButtonAttributes,
SVGAttributes
} from 'svelte/elements';
import type { ItemSchema, SubmissionSchema } from '$lib/@types';
import type { ContributorSchema, ItemSchema, SubmissionSchema } from '$lib/@types';

/** Button */
export interface ButtonProps
Expand Down Expand Up @@ -82,7 +82,7 @@ export interface CardProps {
isReadonly?: boolean;
isAdmin?: boolean;
loading?: boolean;
data: ItemSchema & { number?: number };
data: ItemSchema & { number?: number; contributor?: ContributorSchema };
onSubmit?: (
payload: Partial<SubmissionSchema>,
number: number,
Expand Down
22 changes: 19 additions & 3 deletions src/lib/server/mongo/collections/items.collection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export class ItemsCollection extends BaseCollection<ItemSchema> {
const approvals = transform<Approval[]>(searchParams.get('approvals'));
const withContributors = transform<boolean>(searchParams.get('contributors'));
const withSubmissions = transform<boolean>(searchParams.get('submissions'));
const submitted = transform<boolean>(searchParams.get('submitted'));
const submitted = searchParams.get('submitted');
const definesSubmitted = typeof submitted === 'boolean';
const { count, skip, sort_by, sort_order } = ItemsCollection.makeQuery(params);

Expand All @@ -44,7 +44,15 @@ export class ItemsCollection extends BaseCollection<ItemSchema> {
}
},
{
$unwind: { path: '$submission', preserveNullAndEmptyArrays: true }
$lookup: {
from: CollectionNames.CONTRIBUTORS,
localField: 'contributor_ids',
foreignField: 'id',
pipeline: [
{ $match: { id: contributor_id ? { $eq: contributor_id } : { $ne: '' } } }
],
as: 'contributor'
}
},
{
$match: {
Expand All @@ -53,6 +61,12 @@ export class ItemsCollection extends BaseCollection<ItemSchema> {
? { $in: approvals.concat(!submitted ? (null as any) : []) }
: { $ne: '' }
}
},
{
$set: {
submission: { $arrayElemAt: ['$submission', 0] },
contributor: { $arrayElemAt: ['$contributor', 0] }
}
}
]
.concat(
Expand Down Expand Up @@ -112,7 +126,9 @@ export class ItemsCollection extends BaseCollection<ItemSchema> {
}
},
{
$unwind: { path: '$submission', preserveNullAndEmptyArrays: true }
$set: {
submission: { $arrayElemAt: ['$submission', 0] }
}
}
])
.map((r) => ({ ...r, url: replaceUrl(r.url) }))
Expand Down
1 change: 0 additions & 1 deletion src/routes/+layout.server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ export const load: LayoutServerLoad = async ({ fetch, depends, url, cookies }) =
avatarUrl: data.user.avatar_url
}))! || {};
user = { ...data.user, ...contributor, _id: contributor._id?.toString() };
if (dev) user.role = 'Manager' as any;
data.user = user;
cookies.set(cookieNames.contributorId, user.id.toString(), serializeCookie());
cookies.set(cookieNames.contributorRole, user.role, serializeCookie());
Expand Down
16 changes: 10 additions & 6 deletions src/routes/api/submissions/+server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,11 +90,15 @@ export const PATCH: RequestHandler = async ({ request, cookies, url }) => {
}

body = transform<SubmissionSchema>(await request.json(), {
pick: ['_id' as keyof SubmissionSchema].concat(
user.role === UserRole.MANAGER
? ['hours', 'approval', 'item_id', 'owner_id', 'created_at', 'updated_at']
: ['hours', 'experience', 'owner_id', 'created_at', 'updated_at']
)
pick: ['_id' as keyof SubmissionSchema].concat([
'hours',
'approval',
'experience',
'item_id',
'owner_id',
'created_at',
'updated_at'
])
})!;

if (user.role !== UserRole.MANAGER && body.owner_id !== user.id) return false;
Expand All @@ -110,7 +114,7 @@ export const PATCH: RequestHandler = async ({ request, cookies, url }) => {
action:
user!.role === UserRole.MANAGER
? EventType.PR_SUBMISSION_APPROVED
: EventType.PR_SUBMISSION_UPDATED,
: EventType.PR_SUBMISSION_CREATED,
id: pr.number as number,
index: 1,
organization: pr.org,
Expand Down

0 comments on commit 826f873

Please sign in to comment.