add: working JSON data insert

This commit is contained in:
Dominik Natter
2025-03-27 14:35:44 +01:00
parent 6951e662c9
commit 47dda68f07
6 changed files with 131 additions and 96 deletions

View File

@@ -15,7 +15,9 @@ const dirname = path.dirname(filename)
export const Media: CollectionConfig = {
slug: 'media',
access: {
create: ({ req: { user } }) => Boolean(user),
update: ({ req: { user } }) => Boolean(user && user.role === 'admin'),
delete: ({ req: { user } }) => Boolean(user && user.role === 'admin'),
},
fields: [
{

View File

@@ -1,8 +1,5 @@
import type { CollectionConfig } from "payload";
export const Papers: CollectionConfig = {
slug: "papers",
labels: {
@@ -18,49 +15,61 @@ export const Papers: CollectionConfig = {
if (!user || !id) return false; // Explicitly handle missing ID
const paper = await payload.findByID({
collection: 'papers',
collection: "papers",
id,
depth: 1,
});
if (!paper) return false;
return paper.authors.some((author: any) => author.user.id === user.id);
return paper.authors.some((author: any) => author.user.name === user.name);
},
},
admin: {
useAsTitle: "title",
},
fields: [
{
name: "published",
type: "checkbox",
defaultValue: false,
label: "Veröffentlicht",
access: {
update: ({ req: { user } }) => Boolean(user?.type === "admin"),
}
},
{
name: "title",
type: "text",
required: true,
unique: true,
},
{
name: "department",
type: "select",
options: [
{ label: "WI", value: "WI" },
{ label: "CI", value: "CI" },
{ label: "MD", value: "MD" },
],
},
{
name: "year",
type: "text",
required: true,
},
{
name: "issue",
label: "Problemstellung",
type: "textarea",
required: true,
},
{
name: "goal",
label: "Zielsetzung",
type: "textarea",
required: true,
},
{
name: "result",
label: "Ergebnis",
type: "textarea",
required: true,
},
{
name: "technologies",
@@ -75,7 +84,6 @@ export const Papers: CollectionConfig = {
{
name: "description",
type: "text",
required: true,
admin: {
placeholder: "... wurde für das Frontend verwendet",
},
@@ -90,32 +98,26 @@ export const Papers: CollectionConfig = {
name: "image",
type: "upload",
relationTo: "media",
required: true,
},
{
name: "description",
type: "text",
required: true,
},
],
},
{
name: "mentor",
type: "text",
label: "Betreuer",
},
{
name: "authors",
type: "array",
label: "Projektmitglieder",
required: true,
fields: [
{
name: "profilePicture",
type: "upload",
relationTo: "media",
required: true,
},
{
name: "user",
type: "relationship",
relationTo: "users",
name: "name",
type: "text",
required: true,
},
{
@@ -136,7 +138,6 @@ export const Papers: CollectionConfig = {
{
name: "description",
type: "text",
required: true,
},
],
validate: (authors) => {

View File

@@ -1,20 +1,52 @@
import type { CollectionConfig } from 'payload'
import type { CollectionConfig } from 'payload';
import path from 'path';
import { fileURLToPath } from 'url';
const filename = fileURLToPath(import.meta.url);
const dirname = path.dirname(filename);
export const Users: CollectionConfig = {
slug: 'users',
admin: {
useAsTitle: 'email',
},
access: {
create: ({ req: { user } }) => Boolean(user && user.type === 'admin'),
update: ({ req: { user } }) => {
if (!user) return false;
if(user.type === 'admin') return true;
return false;
},
delete: ({ req: { user } }) => Boolean(user && user.type === 'admin'),
},
fields: [
{
name: 'type',
name: 'type',
type: 'select',
options: [
{ label: 'Admin', value: 'admin' },
{ label: 'Schüler', value: 'student' },
],
}
defaultValue: 'student',
},
{
name: 'email',
type: 'email',
required: true,
unique: true,
},
{
name: 'emailVerified',
type: 'date',
required: false,
},
{
name: 'image',
type: 'text',
required: false,
},
// Email added by default
// Add more fields as needed
],
}
};