2024-07-18 15:48:05 +02:00

69 lines
2.5 KiB
TypeScript

'use server';
import { revalidatePath, revalidateTag } from 'next/cache'
import { Bucket, Post, PostBucket, Project, User, dbSync } from "@/models";
import { Attributes, where } from "@sequelize/core";
import { getCookieAuth, userIsAdmin } from '../../actions';
import { ActionResult } from '../../ActionResult';
import { PostAttributesWithBuckets } from '@/models';
import { inspect } from 'util';
export async function deletePost(postID: number): Promise<ActionResult<boolean>> {
await dbSync;
// revalidatePath("/admin/man-post","page")
if(! await userIsAdmin()) return {error:"Unauthorized, not deleting Post", result: false}
const destroy = await Post.destroy({ where: { id: postID } });
return {result: true};
}
export type GetPostsAttributes = {
id: number;
title: string;
content: string;
description: string;
buckets: Attributes<Bucket>[];
user: Attributes<User>;
project: Attributes<Project>;
createdAt: Date;
updatedAt: Date;
}
export async function getPostsWithBucketsAndProject(): Promise<ActionResult<GetPostsAttributes[]>> {
await dbSync;
if(! await userIsAdmin()) return {error:"Unauthorized, not fetching Posts."}
const posts:Post[] = await Post.findAll({
include: [
{association: Post.associations.buckets, include: Bucket.associations.attachments},
{association: Post.associations.user},
{association: Post.associations.project}],
nest: false
});
return {result:posts.map((post:Post)=>{
return JSON.parse(JSON.stringify(post))
})};
}
export async function getPosts(): Promise<ActionResult<Attributes<Post>[]>> {
await dbSync;
if(! await userIsAdmin()) return {error:"Unauthorized, not fetching Posts."}
const posts = await Post.findAll();
return {result:JSON.parse(JSON.stringify(posts))};
}
export async function updatePost(postAttributes: Partial<Attributes<Post>>): Promise<ActionResult<Attributes<Post>[]>> {
await dbSync;
console.log(`testing postattributes projectid ${postAttributes.project?.id} ${postAttributes.project_id}`)
if(! await userIsAdmin()) return {error:"Unauthorized, not updating Post."}
const post = await Post.update(postAttributes, {where:{id:postAttributes.id}});
return {result:JSON.parse(JSON.stringify(post))};
}
export type PostServerActions = {
deletePost: (id: number) => Promise<ActionResult<boolean>>;
getPosts: () => Promise<ActionResult<GetPostsAttributes[]>>;
getProjects: () => Promise<ActionResult<Attributes<Project>[]>>;
savePost: (
data: Partial<Attributes<Post>>
) => Promise<ActionResult<Attributes<Post>[]>>;
};