diff --git a/Dockerfile b/Dockerfile index baec7ba2..7c14c541 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1 +1,14 @@ -#TODO Configure o Dockerfile +FROM node:18 + +WORKDIR /app + +COPY package*.json ./ +RUN npm install + +COPY . . + +RUN npm run build + +EXPOSE 3000 + +CMD ["npm", "start"] diff --git a/init.sql b/init.sql index e2c36c6f..9982e2bd 100644 --- a/init.sql +++ b/init.sql @@ -1,5 +1,16 @@ USE test_db; ---TODO Crie a tabela de user; +CREATE TABLE user ( + id INT AUTO_INCREMENT PRIMARY KEY, + firstName VARCHAR(100) NOT NULL, + lastName VARCHAR(100) NOT NULL, + email VARCHAR(100) NOT NULL +); ---TODO Crie a tabela de posts; +CREATE TABLE post ( + id INT AUTO_INCREMENT PRIMARY KEY, + title VARCHAR(100) NOT NULL, + description VARCHAR(100) NOT NULL, + userId INT NOT NULL, + FOREIGN KEY (userId) REFERENCES user(id) +); diff --git a/src/entity/Post.ts b/src/entity/Post.ts index a1f68038..16056fc0 100644 --- a/src/entity/Post.ts +++ b/src/entity/Post.ts @@ -1,3 +1,17 @@ -import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"; +import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from "typeorm"; +import { User } from "./User"; -//TODO Crie a entidade de Post +@Entity() +export class Post { + @PrimaryGeneratedColumn() + id!: number; + + @Column() + title!: string; + + @Column() + description!: string; + + @ManyToOne(() => User, (user) => user.posts) + user!: User; +} diff --git a/src/entity/User.ts b/src/entity/User.ts index a8e22632..1df47747 100644 --- a/src/entity/User.ts +++ b/src/entity/User.ts @@ -1,3 +1,20 @@ -import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"; +import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from "typeorm"; +import { Post } from "./Post"; -//TODO Crie a entidade de User +@Entity() +export class User { + @PrimaryGeneratedColumn() + id!: number; + + @Column() + firstName!: string; + + @Column() + lastName!: string; + + @Column() + email!: string; + + @OneToMany(() => Post, (post) => post.user) + posts!: Post[]; +} diff --git a/src/index.ts b/src/index.ts index 1af52a84..babb22eb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -34,11 +34,30 @@ const initializeDatabase = async () => { initializeDatabase(); app.post('/users', async (req, res) => { -// Crie o endpoint de users + try { + const user = AppDataSource.getRepository(User).create(req.body); + const result = await AppDataSource.getRepository(User).save(user); + res.status(201).json(result); + } catch (err) { + res.status(500).json({ error: "Failed to create user", details: err }); + } }); app.post('/posts', async (req, res) => { -// Crie o endpoint de posts + try { + const { title, description, userId } = req.body; + + const user = await AppDataSource.getRepository(User).findOneBy({ id: userId }); + if (!user) { + return res.status(404).json({ error: "User not found" }); + } + + const post = AppDataSource.getRepository(Post).create({ title, description, user }); + const result = await AppDataSource.getRepository(Post).save(post); + res.status(201).json(result); + } catch (err) { + res.status(500).json({ error: "Failed to create post", details: err }); + } }); const PORT = process.env.PORT || 3000;