'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> { 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[]; user: Attributes; project: Attributes; createdAt: Date; updatedAt: Date; } export async function getPostsWithBucketsAndProject(): Promise> { 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[]>> { 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>): Promise[]>> { 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>; getPosts: () => Promise>; getProjects: () => Promise[]>>; savePost: ( data: Partial> ) => Promise[]>>; };