Initial commit

This commit is contained in:
Autonomic Cooperative
2024-05-17 22:32:32 +00:00
commit d07472434f
43 changed files with 12506 additions and 0 deletions

2
payload/.dockerignore Normal file
View File

@ -0,0 +1,2 @@
node_modules
Dockerfile

5
payload/.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
node_modules/
.env
build
dist
src/media

31
payload/Dockerfile Normal file
View File

@ -0,0 +1,31 @@
FROM node:lts as base
WORKDIR /base
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile
COPY . .
FROM base AS dev
ENV NODE_ENV=development
EXPOSE 3001
CMD ["yarn","dev"]
FROM base AS build
ENV NODE_ENV=production
WORKDIR /build
COPY --from=base /base .
RUN yarn build
FROM build as prod
ENV NODE_ENV=production
WORKDIR /prod
COPY package*.json .
RUN yarn install --production
COPY --from=build /build/tsconfig.json ./tsconfig.json
COPY --from=build /build/dist ./dist
COPY --from=build /build/build ./build
EXPOSE 3000
COPY docker-entrypoint.sh /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["yarn", "serve"]

32
payload/docker-entrypoint.sh Executable file
View File

@ -0,0 +1,32 @@
#!/bin/bash
set -eu
file_env() {
local var="$1"
local fileVar="${var}_FILE"
local def="${2:-}"
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
exit 1
fi
local val="$def"
if [ "${!var:-}" ]; then
val="${!var}"
elif [ "${!fileVar:-}" ]; then
val="$(< "${!fileVar}")"
fi
export "$var"="$val"
unset "$fileVar"
}
file_env "TOKEN"
file_env "MONGODB_PASSWORD"
file_env "PAYLOAD_SECRET"
export MONGODB_URI="mongodb://$MONGODB_USER:$MONGODB_PASSWORD@$MONGODB_HOST:$MONGODB_PORT"
"$@"

5
payload/nodemon.json Normal file
View File

@ -0,0 +1,5 @@
{
"ext": "ts",
"ignore": ["src/types.ts"],
"exec": "yarn generate:types && ts-node src/server.ts"
}

28
payload/package.json Normal file
View File

@ -0,0 +1,28 @@
{
"name": "astroad",
"description": "Astroad - Payload",
"version": "1.1",
"main": "dist/server.js",
"license": "MIT",
"scripts": {
"dev": "cross-env PAYLOAD_CONFIG_PATH=src/payload.config.ts nodemon",
"build:payload": "cross-env PAYLOAD_CONFIG_PATH=src/payload.config.ts node -r tsconfig-paths/register node_modules/payload/dist/bin/index.js build",
"build:server": "tsc",
"build": "yarn build:payload && yarn build:server",
"serve": "cross-env PAYLOAD_CONFIG_PATH=dist/payload.config.js node -r tsconfig-paths/register dist/server.js",
"generate:types": "cross-env PAYLOAD_CONFIG_PATH=src/payload.config.ts node -r tsconfig-paths/register node_modules/payload/dist/bin/index.js generate:types"
},
"dependencies": {
"cross-env": "^7.0.3",
"dotenv": "^16.3.1",
"express": "^4.17.1",
"payload": "^1.15.6",
"tsconfig-paths": "^4.2.0"
},
"devDependencies": {
"@types/express": "^4.17.18",
"nodemon": "^3.0.1",
"ts-node": "^10.9.1",
"typescript": "^5.1.6"
}
}

View File

@ -0,0 +1,25 @@
import { CollectionConfig } from "payload/types";
export const Media: CollectionConfig = {
slug: "media",
admin: {},
access: {
read: (): boolean => true,
create: () => true,
update: () => true,
},
upload: {
staticURL: "/media",
staticDir: "media",
mimeTypes: ["image/*"],
},
fields: [
{
name: "alt",
type: "text",
},
],
};
export default Media;

View File

@ -0,0 +1,98 @@
import { CollectionConfig } from "payload/types";
const Posts: CollectionConfig = {
slug: "posts",
admin: {
defaultColumns: ["title", "author", "status"],
useAsTitle: "title",
},
access: {
read: () => true,
create: () => true,
update: () => true,
},
hooks: {
afterChange: [
async () => {
console.log(process.env.TOKEN);
try {
process.env.NODE_ENV !== "development" &&
console.log(
await fetch(
`https://api.github.com/repos/${process.env.REPOSITORY}/dispatches`,
{
method: "POST",
headers: {
Accept: "application/vnd.github.everest-preview+json",
Authorization: `token ${process.env.TOKEN}`,
},
body: JSON.stringify({
event_type: "payload_update",
}),
}
)
);
} catch (e) {
console.log(e);
}
},
],
},
fields: [
{
name: "title",
type: "text",
},
{
name: "hallo",
type: "text",
},
{
name: "publishedDate",
type: "date",
},
{
name: "content",
type: "richText",
admin: {
elements: ["h2", "h3", "h4", "link", "ol", "ul", "upload"],
leaves: ["bold", "italic", "underline"],
upload: {
collections: {
media: {
fields: [
{
name: "imagel",
type: "upload",
relationTo: "media",
required: true,
},
],
},
},
},
},
},
{
name: "status",
type: "select",
options: [
{
value: "draft",
label: "Draft",
},
{
value: "published",
label: "Published",
},
],
defaultValue: "draft",
admin: {
position: "sidebar",
},
},
],
};
export default Posts;

View File

@ -0,0 +1,21 @@
import { CollectionConfig } from 'payload/types';
const Users: CollectionConfig = {
slug: 'users',
auth: true,
admin: {
useAsTitle: 'email',
},
access: {
read: () => true,
},
fields: [
// Email added by default
{
name: 'name',
type: 'text',
}
],
};
export default Users;

View File

@ -0,0 +1,26 @@
import { buildConfig } from "payload/config";
import path from "path";
import Posts from "@/collections/Posts";
import Users from "@/collections/Users";
import Media from "@/collections/Media";
export default buildConfig({
serverURL: process.env.PAYLOAD_URL,
admin: {
user: Users.slug,
webpack: (config) => ({
...config,
resolve: {
...config.resolve,
alias: {
...config.resolve.alias,
"@": path.resolve(__dirname, "./"),
},
},
}),
},
collections: [Posts, Users, Media],
typescript: {
outputFile: path.resolve("/", "types.ts"),
},
});

21
payload/src/server.ts Normal file
View File

@ -0,0 +1,21 @@
import express from "express";
import payload from "payload";
require("dotenv").config();
const app = express();
app.get("/", (_, res) => {
res.redirect("/admin");
});
payload.init({
secret: process.env.PAYLOAD_SECRET,
mongoURL: process.env.MONGODB_URI,
express: app,
onInit: () => {
payload.logger.info(`Payload Admin URL: ${payload.getAdminURL()}`);
},
});
app.use("/media", express.static("media"));
app.listen(process.env.PAYLOAD_PORT);

18
payload/tsconfig.json Normal file
View File

@ -0,0 +1,18 @@
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"strict": false,
"esModuleInterop": true,
"skipLibCheck": true,
"outDir": "./dist",
"paths": {
"@/*": ["./src/*", "./dist/*", "./dist/src/*"]
},
"jsx": "react"
},
"ts-node": {
"transpileOnly": true,
"require": ["tsconfig-paths/register"]
}
}

6974
payload/yarn.lock Normal file

File diff suppressed because it is too large Load Diff