added profile description editing, fixed light theme and viewer caching

This commit is contained in:
lnn0q 2025-06-17 21:46:40 +03:00
parent 58a211663a
commit c8f68b7486
10 changed files with 187 additions and 18 deletions

View file

@ -14,14 +14,15 @@ import { UserOneResolver } from './resolvers/userOneResolver';
import { LoginResolver } from './resolvers/auth/login';
import { LogoutResolver } from './resolvers/auth/logout';
import { SignUpResolver } from './resolvers/auth/signUp';
import { BookUpdateResolver } from './resolvers/bookUpdateResolver';
import { BookDeleteResolver } from './resolvers/bookDeleteResolver';
import { BookChapterCreateResolver } from './resolvers/bookChapterCreateResolver';
import { BookChapterDeleteResolver } from './resolvers/bookChapterDelete';
import { BookChapterUpdateResolver } from './resolvers/bookChapterUpdateResolver';
import { BookCreateResolver } from './resolvers/bookCreateResolver';
import { BookDeleteResolver } from './resolvers/bookDeleteResolver';
import { BookUpdateResolver } from './resolvers/bookUpdateResolver';
import { RatingSetResolver } from './resolvers/ratingSetResolver';
import { ReviewCreateResolver } from './resolvers/reviewCreateResolver';
import { UserUpdateResolver } from './resolvers/userUpdateResolver';
export const Query: QueryResolvers = {
bookOne: BookOneResolver,
@ -44,7 +45,8 @@ export const Mutation: MutationResolvers = {
bookChapterDelete: BookChapterDeleteResolver,
bookChapterUpdate: BookChapterUpdateResolver,
ratingSet: RatingSetResolver,
reviewCreate: ReviewCreateResolver
reviewCreate: ReviewCreateResolver,
userUpdate: UserUpdateResolver
};
export const Subscription = {};

View file

@ -6,6 +6,7 @@ export async function toUserSchema(model: User): Promise<UserSchema> {
id: model.id,
username: model.username,
createdAt: model.createdAt.toISOString(),
updatedAt: model.updatedAt.toISOString()
updatedAt: model.updatedAt.toISOString(),
description: model.description
};
}

View file

@ -0,0 +1,36 @@
import { ensureIdentity } from '@app/server/helpers';
import { IdentityContext } from '@app/server/identity';
import { prisma, uuid } from '@app/server/prisma/client';
import { MutationUserUpdateArgs, User } from '@generated/types';
import { toUserSchema } from './mappers/userMapper';
import { call } from '@app/common';
export async function UserUpdateResolver(
_: any,
{ input }: MutationUserUpdateArgs,
{ identity }: IdentityContext
): Promise<User> {
ensureIdentity(identity);
if (input.id != identity.id) throw new Error('Operation is not permitted.'); //todo: add admin access
if (input.description != null && input.description.length > 700)
throw new Error('Description is too long.');
const description = call((): string | null | undefined => {
if (input.description != null && input.description.length !== 0) return input.description;
if (input.description != null && input.description.length === 0) return null;
return undefined;
});
const updated = await prisma.user.update({
where: {
id: input.id
},
data: {
description
}
});
return toUserSchema(updated);
}

View file

@ -25,6 +25,7 @@ type Mutation {
reviewUpdate(input: ReviewUpdateInput!): Review!
reviewDelete(id: ID!): Void
ratingSet(input: RatingSetInput!): Void
userUpdate(input: UserUpdateInput!): User!
}
input SignUpInput {
@ -63,6 +64,11 @@ input UserOneInput {
username: String
}
input UserUpdateInput {
id: ID!
description: String
}
input PaginationFilterInput {
terms: String
offset: Int