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 { Prisma, UserRole } from '@prisma/client';
import Config from '../../../config/Config';
import LazyVal from '../../../shared/helpers/LazyVal'; import LazyVal from '../../../shared/helpers/LazyVal';
import GitlabUser from '../../../shared/types/Gitlab/GitlabUser'; import GitlabUser from '../../../shared/types/Gitlab/GitlabUser';
import GitlabManager from '../../../managers/GitlabManager'; import GitlabManager from '../../../managers/GitlabManager';
...@@ -14,16 +13,21 @@ export default Prisma.defineExtension(client => { ...@@ -14,16 +13,21 @@ export default Prisma.defineExtension(client => {
role: true role: true
}, },
compute(user) { compute(user) {
return Config.permissions.teachingStaff.includes(user.role!); return user.role == UserRole.TEACHING_STAFF || user.role == UserRole.ADMIN;
} }
}, },
gitlabProfile : { isAdmin : {
needs: { needs: {
gitlabId: true role: true
},
compute(user) {
return user.role == UserRole.ADMIN;
}
}, },
gitlabProfile : {
compute(user) { compute(user) {
return new LazyVal<GitlabUser | undefined>(() => { return new LazyVal<GitlabUser | undefined>(() => {
return GitlabManager.getUserById(user.gitlabId); return GitlabManager.getUserById(user.id);
}); });
} }
} }
......
...@@ -142,7 +142,7 @@ class GitlabManager { ...@@ -142,7 +142,7 @@ class GitlabManager {
}; };
members.forEach(member => { members.forEach(member => {
if ( member.access_level >= GitlabAccessLevel.REPORTER ) { if ( member.access_level >= GitlabAccessLevel.REPORTER ) {
if ( member.id === req.session.profile.gitlabId ) { if ( member.id === req.session.profile.id ) {
isUsersAtLeastReporter.user = true; isUsersAtLeastReporter.user = true;
} else if ( member.id === Config.gitlab.account.id ) { } else if ( member.id === Config.gitlab.account.id ) {
isUsersAtLeastReporter.dojo = true; isUsersAtLeastReporter.dojo = true;
......
import GitlabUser from '../shared/types/Gitlab/GitlabUser'; import GitlabUser from '../shared/types/Gitlab/GitlabUser';
import { Prisma } from '@prisma/client'; import { Prisma } from '@prisma/client';
import db from '../helpers/DatabaseHelper'; import db from '../helpers/DatabaseHelper';
import GitlabProfile from '../shared/types/Gitlab/GitlabProfile';
import { User } from '../types/DatabaseTypes'; import { User } from '../types/DatabaseTypes';
...@@ -23,23 +24,36 @@ class UserManager { ...@@ -23,23 +24,36 @@ class UserManager {
}) as unknown as User ?? undefined; }) as unknown as User ?? undefined;
} }
async getByGitlabId(gitlabId: number, returnIdIfUndefined: boolean = true, include: Prisma.UserInclude | undefined = undefined): Promise<User | number | undefined> { async getUpdateFromGitlabProfile(gitlabProfile: GitlabProfile, refreshToken: string): Promise<User> {
return await db.user.findUnique({ await db.user.upsert({
where : { where : {
gitlabId: gitlabId id: gitlabProfile.id
}, },
include: include update: {
}) as unknown as User ?? (returnIdIfUndefined ? gitlabId : undefined); 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> { 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 ) { if ( typeof user === 'number' && createIfNotExist ) {
user = (await db.user.create({ user = (await db.user.create({
data: { data: {
firstname: gitlabUser.name, id : gitlabUser.id,
gitlabId : gitlabUser.id gitlabUsername: gitlabUser.name
} }
})).id; })).id;
} }
......
...@@ -136,11 +136,11 @@ class AssignmentRoutes implements RoutesManager { ...@@ -136,11 +136,11 @@ class AssignmentRoutes implements RoutesManager {
connectOrCreate: [ ...params.members.map(gitlabUser => { connectOrCreate: [ ...params.members.map(gitlabUser => {
return { return {
create: { create: {
gitlabId : gitlabUser.id, id : gitlabUser.id,
firstname: gitlabUser.name gitlabUsername: gitlabUser.name
}, },
where : { where : {
gitlabId: gitlabUser.id id: gitlabUser.id
} }
}; };
}) ] }) ]
......
...@@ -135,7 +135,7 @@ class ExerciseRoutes implements RoutesManager { ...@@ -135,7 +135,7 @@ class ExerciseRoutes implements RoutesManager {
} }
try { 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 { try {
return await GitlabManager.addRepositoryMember(repository.id, memberId, GitlabAccessLevel.DEVELOPER); return await GitlabManager.addRepositoryMember(repository.id, memberId, GitlabAccessLevel.DEVELOPER);
} catch ( e ) { } catch ( e ) {
...@@ -158,11 +158,11 @@ class ExerciseRoutes implements RoutesManager { ...@@ -158,11 +158,11 @@ class ExerciseRoutes implements RoutesManager {
connectOrCreate: [ ...params.members.map(gitlabUser => { connectOrCreate: [ ...params.members.map(gitlabUser => {
return { return {
create: { create: {
gitlabId : gitlabUser.id, id : gitlabUser.id,
firstname: gitlabUser.name gitlabUsername: gitlabUser.name
}, },
where : { where : {
gitlabId: gitlabUser.id id: gitlabUser.id
} }
}; };
}) ] }) ]
......
...@@ -26,9 +26,10 @@ const resultBase = Prisma.validator<Prisma.ResultDefaultArgs>()({ ...@@ -26,9 +26,10 @@ const resultBase = Prisma.validator<Prisma.ResultDefaultArgs>()({
}); });
export type User = Omit<Prisma.UserGetPayload<typeof userBase>, 'password'> & { export type User = Omit<Prisma.UserGetPayload<typeof userBase>, 'gitlabLastRefreshToken'> & {
password?: string gitlabLastRefreshToken?: string
isTeachingStaff: boolean isTeachingStaff: boolean
isAdmin: boolean
gitlabProfile: LazyVal<GitlabUser> gitlabProfile: LazyVal<GitlabUser>
} }
export type Assignment = Prisma.AssignmentGetPayload<typeof assignmentBase> 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