Compare commits
6 Commits
f84ec38af3
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 44bd4c8504 | |||
| 9445ad3f8f | |||
| b12a333d8a | |||
| 618614e702 | |||
| 689291ef6b | |||
| adcc6e8a4f |
@ -1,22 +1,25 @@
|
||||
{
|
||||
"name": "backend",
|
||||
"module": "index.ts",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"@types/bun": "latest",
|
||||
"@types/pg": "^8.15.6",
|
||||
"drizzle-kit": "^0.31.6",
|
||||
"tsx": "^4.20.6"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"typescript": "^5"
|
||||
},
|
||||
"dependencies": {
|
||||
"dotenv": "^17.2.3",
|
||||
"drizzle-orm": "^0.44.7",
|
||||
"pg": "^8.16.3",
|
||||
"zod": "^4.1.12",
|
||||
"types": "workspace:*"
|
||||
}
|
||||
"name": "backend",
|
||||
"module": "index.ts",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "bun run src/index.ts"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/bun": "latest",
|
||||
"@types/pg": "^8.15.6",
|
||||
"drizzle-kit": "^0.31.6",
|
||||
"tsx": "^4.20.6"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"typescript": "^5"
|
||||
},
|
||||
"dependencies": {
|
||||
"dotenv": "^17.2.3",
|
||||
"drizzle-orm": "^0.44.7",
|
||||
"pg": "^8.16.3",
|
||||
"zod": "^4.1.12",
|
||||
"types": "workspace:*"
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@ import { styleText } from "node:util";
|
||||
const CORS_HEADERS = {
|
||||
"Access-Control-Allow-Origin": ENV.FRONTEND_URL,
|
||||
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
||||
"Access-Control-Allow-Headers": "Content-Type, Authorization",
|
||||
"Access-Control-Allow-Headers": "*",
|
||||
};
|
||||
|
||||
const allowCors = async (_: Request): Promise<Response> => {
|
||||
@ -16,7 +16,7 @@ const allowCors = async (_: Request): Promise<Response> => {
|
||||
type Handler = (req: Request) => Promise<Response>;
|
||||
type Middleware = (fn: Handler) => Handler;
|
||||
|
||||
const withCors = (fn: Handler): Handler => {
|
||||
const withCors: Middleware = (fn) => {
|
||||
return async (req) => {
|
||||
const res = await fn(req);
|
||||
|
||||
@ -42,7 +42,7 @@ const getColors = (status: number): Parameters<typeof styleText>[0] => {
|
||||
}
|
||||
};
|
||||
|
||||
const withLogger = (fn: Handler): Handler => {
|
||||
const withLogger: Middleware = (fn) => {
|
||||
return async (req) => {
|
||||
const res = await fn(req);
|
||||
|
||||
@ -58,26 +58,14 @@ const withLogger = (fn: Handler): Handler => {
|
||||
};
|
||||
};
|
||||
|
||||
const withFrontendReferrer: Middleware = (fn) => {
|
||||
return async (req) => {
|
||||
const referrer = req.headers.get("referrer");
|
||||
|
||||
if (referrer !== ENV.FRONTEND_URL) {
|
||||
return new Response(undefined, { status: 403 });
|
||||
}
|
||||
|
||||
return fn(req);
|
||||
};
|
||||
};
|
||||
|
||||
const server = Bun.serve({
|
||||
port: ENV.PORT,
|
||||
routes: {
|
||||
"/health": new Response("alive!"),
|
||||
"/sign": {
|
||||
GET: withFrontendReferrer(withLogger(withCors(getPetitions))),
|
||||
POST: withFrontendReferrer(withLogger(withCors(signPetition))),
|
||||
OPTIONS: withFrontendReferrer(withLogger(allowCors)),
|
||||
GET: withLogger(withCors(getPetitions)),
|
||||
POST: withLogger(withCors(signPetition)),
|
||||
OPTIONS: withLogger(allowCors),
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
import { db } from "./database";
|
||||
import { signaturesTable } from "./schema";
|
||||
import { desc } from "drizzle-orm";
|
||||
|
||||
export const insertSignature = async (
|
||||
signature: typeof signaturesTable.$inferInsert,
|
||||
@ -15,5 +16,8 @@ export const insertSignature = async (
|
||||
export const getSignatures = async (): Promise<
|
||||
Array<typeof signaturesTable.$inferSelect>
|
||||
> => {
|
||||
return db.select().from(signaturesTable);
|
||||
return db
|
||||
.select()
|
||||
.from(signaturesTable)
|
||||
.orderBy(desc(signaturesTable.createdAt));
|
||||
};
|
||||
|
||||
@ -6,9 +6,15 @@ import { ArrowLeft, Users } from "lucide-react";
|
||||
import { usePetitions } from "@/state";
|
||||
|
||||
const Testimonies = () => {
|
||||
const { signatures } = usePetitions();
|
||||
const { signatures: allSignatures } = usePetitions();
|
||||
const signatures = allSignatures
|
||||
.filter((s) => s.comment != null)
|
||||
.map((s) => ({
|
||||
...s,
|
||||
name: s.name ?? "Anonymous",
|
||||
}));
|
||||
|
||||
const totalCount = signatures.length;
|
||||
const totalCount = allSignatures.length;
|
||||
|
||||
const navigate = useNavigate();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user