style: run eslint and prettier
All checks were successful
TrafficCue Server CI / check (push) Successful in 23s

This commit is contained in:
2025-08-30 10:31:03 +02:00
parent 3b876bbc80
commit fae7308af8
10 changed files with 185 additions and 134 deletions

View File

@ -12,8 +12,8 @@ export function getDb(forceSync = false): DataSource {
type: "postgres",
url: process.env.DATABASE_URL,
synchronize: process.argv.includes("sync") || forceSync,
entities: [User, Review, Saved]
})
entities: [User, Review, Saved],
});
}
return db;
}

View File

@ -1,4 +1,10 @@
import { BaseEntity, Column, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm";
import {
BaseEntity,
Column,
Entity,
ManyToOne,
PrimaryGeneratedColumn,
} from "typeorm";
import { type User } from "./User";
@Entity()
@ -10,12 +16,12 @@ export class Review extends BaseEntity {
user: User;
@Column({
type: "float"
type: "float",
})
latitude: number;
@Column({
type: "float"
type: "float",
})
longitude: number;
@ -23,12 +29,12 @@ export class Review extends BaseEntity {
rating: number;
@Column({
type: "text"
type: "text",
})
comment: string;
@Column({
default: () => "NOW()"
default: () => "NOW()",
})
created_at: Date;
}
}

View File

@ -1,4 +1,10 @@
import { BaseEntity, Column, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm";
import {
BaseEntity,
Column,
Entity,
ManyToOne,
PrimaryGeneratedColumn,
} from "typeorm";
import { type User } from "./User";
@Entity()
@ -18,7 +24,7 @@ export class Saved extends BaseEntity {
data: string;
@Column({
default: () => "NOW()"
default: () => "NOW()",
})
created_at: Date;
}
}

View File

@ -1,4 +1,10 @@
import { BaseEntity, Column, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm";
import {
BaseEntity,
Column,
Entity,
OneToMany,
PrimaryGeneratedColumn,
} from "typeorm";
import { type Review } from "./Review";
import { type Saved } from "./Saved";
@ -17,12 +23,12 @@ export class User extends BaseEntity {
saved: Saved[];
@Column({
default: () => "NOW()"
default: () => "NOW()",
})
updated_at: Date;
@Column({
default: () => "NOW()"
default: () => "NOW()",
})
created_at: Date;
}
}

View File

@ -3,4 +3,4 @@ import app from "./main";
await initDb();
Bun.serve(app);
Bun.serve(app);

View File

@ -61,36 +61,43 @@ app.get("/api/config", (c) => {
app.post("/api/user", async (c) => {
const { token } = await c.req.json();
if(!token) {
if (!token) {
return c.json({ error: "Invalid request" }, 400);
}
if(!verifyToken(token)) {
if (!verifyToken(token)) {
return c.json({ error: "Invalid token" }, 400);
}
const tokenData = getTokenData(token);
if(!tokenData) return c.json({ error: "Invalid token" }, 400);
if(!tokenData.sub || typeof tokenData.sub != "string") return c.json({ error: "Invalid token" }, 400);
if(!tokenData.preferred_username || typeof tokenData.preferred_username != "string") return c.json({ error: "Invalid token" }, 400);
const user = await User.findOneBy({ id: tokenData.sub }) || new User();
if (!tokenData) return c.json({ error: "Invalid token" }, 400);
if (!tokenData.sub || typeof tokenData.sub != "string")
return c.json({ error: "Invalid token" }, 400);
if (
!tokenData.preferred_username ||
typeof tokenData.preferred_username != "string"
)
return c.json({ error: "Invalid token" }, 400);
const user = (await User.findOneBy({ id: tokenData.sub })) || new User();
user.id = tokenData.sub;
user.username = tokenData.preferred_username;
user.updated_at = new Date();
await user.save();
return c.json({ success: true });
})
});
app.get("/api/user", async (c) => {
const name = c.req.query("name");
if(!name) return c.json({ sucess: false }, 400);
if (!name) return c.json({ sucess: false }, 400);
const users = await User.findBy({
username: ILike("%" + name + "%")
username: ILike("%" + name + "%"),
});
const mapped = users.map((u) => {
return { username: u.username };
});
const mapped = users.map(u => { return { username: u.username }; });
return c.json(mapped);
})
});
if (process.env.REVIEWS_ENABLED) {
app.get("/api/reviews", async (c) => {
@ -104,7 +111,7 @@ if (process.env.REVIEWS_ENABLED) {
console.log(`Fetching reviews for lat: ${lat}, lon: ${lon}`);
const reviews = await Review.findBy({
latitude: nlat,
longitude: nlon
longitude: nlon,
});
return c.json(reviews);
});
@ -137,7 +144,7 @@ if (process.env.REVIEWS_ENABLED) {
}
const user = await User.findOneBy({ id: uid });
if(!user) {
if (!user) {
return c.json({ error: "Invalid user ID" }, 400);
}
@ -181,19 +188,18 @@ app.get("/api/saved", async (c) => {
// return c.json({ error: "Invalid user ID" }, 400);
// }
const saved = await Saved.findBy({ user: {
id: uid
} });
const saved = await Saved.findBy({
user: {
id: uid,
},
});
return c.json(saved);
})
});
app.put("/api/saved", async (c) => {
const { name, data } = await c.req.json();
if (!name || !data) {
return c.json(
{ error: "name and data are required" },
400,
);
return c.json({ error: "name and data are required" }, 400);
}
const authHeader = c.req.header("Authorization");
@ -215,7 +221,7 @@ app.put("/api/saved", async (c) => {
}
const user = await User.findOneBy({ id: uid });
if(!user) {
if (!user) {
return c.json({ error: "Invalid user ID" }, 400);
}
@ -225,16 +231,13 @@ app.put("/api/saved", async (c) => {
saved.data = data;
await saved.save();
return c.json({ success: true })
})
return c.json({ success: true });
});
app.delete("/api/saved", async (c) => {
const { name } = await c.req.json();
if (!name) {
return c.json(
{ error: "name is required" },
400,
);
return c.json({ error: "name is required" }, 400);
}
const authHeader = c.req.header("Authorization");
@ -261,13 +264,13 @@ app.delete("/api/saved", async (c) => {
// }
const saved = await Saved.findOneBy({ user: { id: uid }, name });
if(!saved) {
if (!saved) {
return c.json({ error: "No such save found" }, 400);
}
await saved.remove();
return c.json({ success: true });
})
});
if (process.env.TANKERKOENIG_API_KEY) {
app.get("/api/fuel/list", async (c) => {