Skip to content
Snippets Groups Projects
Commit 6211a07c authored by michael.minelli's avatar michael.minelli
Browse files

DB => Update code to new schema

parent 81fc15d8
No related branches found
No related tags found
No related merge requests found
import { Prisma } from '@prisma/client';
import Config from '../../../config/Config';
import { Prisma, UserRole } from '@prisma/client';
import LazyVal from '../../../shared/helpers/LazyVal';
import GitlabUser from '../../../shared/types/Gitlab/GitlabUser';
import GitlabManager from '../../../managers/GitlabManager';
......@@ -14,16 +13,21 @@ export default Prisma.defineExtension(client => {
role: true
},
compute(user) {
return Config.permissions.teachingStaff.includes(user.role!);
return user.role == UserRole.TEACHING_STAFF || user.role == UserRole.ADMIN;
}
},
gitlabProfile : {
isAdmin : {
needs: {
gitlabId: true
role: true
},
compute(user) {
return user.role == UserRole.ADMIN;
}
},
gitlabProfile : {
compute(user) {
return new LazyVal<GitlabUser | undefined>(() => {
return GitlabManager.getUserById(user.gitlabId);
return GitlabManager.getUserById(user.id);
});
}
}
......
......@@ -142,7 +142,7 @@ class GitlabManager {
};
members.forEach(member => {
if ( member.access_level >= GitlabAccessLevel.REPORTER ) {
if ( member.id === req.session.profile.gitlabId ) {
if ( member.id === req.session.profile.id ) {
isUsersAtLeastReporter.user = true;
} else if ( member.id === Config.gitlab.account.id ) {
isUsersAtLeastReporter.dojo = true;
......
import GitlabUser from '../shared/types/Gitlab/GitlabUser';
import { Prisma } from '@prisma/client';
import db from '../helpers/DatabaseHelper';
import GitlabProfile from '../shared/types/Gitlab/GitlabProfile';
import { User } from '../types/DatabaseTypes';
......@@ -23,23 +24,36 @@ class UserManager {
}) as unknown as User ?? undefined;
}
async getByGitlabId(gitlabId: number, returnIdIfUndefined: boolean = true, include: Prisma.UserInclude | undefined = undefined): Promise<User | number | undefined> {
return await db.user.findUnique({
async getUpdateFromGitlabProfile(gitlabProfile: GitlabProfile, refreshToken: string): Promise<User> {
await db.user.upsert({
where : {
gitlabId: gitlabId
id: gitlabProfile.id
},
include: include
}) as unknown as User ?? (returnIdIfUndefined ? gitlabId : undefined);
update: {
mail : gitlabProfile.email,
gitlabLastInfo: gitlabProfile
},
create: {
id : gitlabProfile.id,
name : gitlabProfile.name,
mail : gitlabProfile.email,
gitlabUsername: gitlabProfile.username,
gitlabLastInfo: gitlabProfile,
deleted : false
}
});
return (await this.getById(gitlabProfile.id))!;
}
async getFromGitlabUser(gitlabUser: GitlabUser, createIfNotExist: boolean = false, include: Prisma.UserInclude | undefined = undefined): Promise<User | number | undefined> {
let user = await this.getByGitlabId(gitlabUser.id, true, include);
let user = await this.getById(gitlabUser.id, include) ?? gitlabUser.id;
if ( typeof user === 'number' && createIfNotExist ) {
user = (await db.user.create({
data: {
firstname: gitlabUser.name,
gitlabId : gitlabUser.id
id : gitlabUser.id,
gitlabUsername: gitlabUser.name
}
})).id;
}
......
......@@ -136,11 +136,11 @@ class AssignmentRoutes implements RoutesManager {
connectOrCreate: [ ...params.members.map(gitlabUser => {
return {
create: {
gitlabId : gitlabUser.id,
firstname: gitlabUser.name
id : gitlabUser.id,
gitlabUsername: gitlabUser.name
},
where : {
gitlabId: gitlabUser.id
id: gitlabUser.id
}
};
}) ]
......
......@@ -135,7 +135,7 @@ class ExerciseRoutes implements RoutesManager {
}
try {
await Promise.all([ ...new Set([ ...assignment.staff.map(user => user.gitlabId), ...params.members.map(member => member.id) ]) ].map(async (memberId: number): Promise<GitlabMember | false> => {
await Promise.all([ ...new Set([ ...assignment.staff.map(user => user.id), ...params.members.map(member => member.id) ]) ].map(async (memberId: number): Promise<GitlabMember | false> => {
try {
return await GitlabManager.addRepositoryMember(repository.id, memberId, GitlabAccessLevel.DEVELOPER);
} catch ( e ) {
......@@ -158,11 +158,11 @@ class ExerciseRoutes implements RoutesManager {
connectOrCreate: [ ...params.members.map(gitlabUser => {
return {
create: {
gitlabId : gitlabUser.id,
firstname: gitlabUser.name
id : gitlabUser.id,
gitlabUsername: gitlabUser.name
},
where : {
gitlabId: gitlabUser.id
id: gitlabUser.id
}
};
}) ]
......
......@@ -26,9 +26,10 @@ const resultBase = Prisma.validator<Prisma.ResultDefaultArgs>()({
});
export type User = Omit<Prisma.UserGetPayload<typeof userBase>, 'password'> & {
password?: string
export type User = Omit<Prisma.UserGetPayload<typeof userBase>, 'gitlabLastRefreshToken'> & {
gitlabLastRefreshToken?: string
isTeachingStaff: boolean
isAdmin: boolean
gitlabProfile: LazyVal<GitlabUser>
}
export type Assignment = Prisma.AssignmentGetPayload<typeof assignmentBase>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment