Coder Social home page Coder Social logo

event-manager's People

Contributors

beatryzsalviano avatar cybelealb avatar gihdassie avatar juniormelodev avatar linckrafael avatar lucasdev194 avatar matheusmv avatar

Stargazers

 avatar

Watchers

 avatar

event-manager's Issues

Adicionar autenticação e autorização

Certas funcionalidades do sistema são restritas a organizadores de eventos, portanto, um sistema de autenticação com autorização deve proteger esses recursos do sistema.

Rotas que precisam de autorização

  • Eventos:
  1. Criar um evento: POST /events
  2. Atualizar um evento: PUT /events
  3. Deletar um evento: DELETE /events
  • Categorias:
  1. Criar uma categoria: POST /categories
  2. Atualizar uma categoria: PUT /categories
  3. Deletar uma categoria: DELETE /categories

Observação

  1. Essa funcionalidade requer a criar de um sistema de registro de usuários
  2. Os usuário devem ter uma 'role': ADMIN, MANAGER, USER
  3. Por padrão todo usuário ao ser criado terá a role 'USER'.
  4. O admin deverá alterar a role do usuário através de uma requisição que contém o id do usuário e sua nova 'role'.
{
  "email": "[email protected]",
  "password": "12345"
}

TODO

Analisar requisitos, definir rotas, entidades, etc

Validar conflitos de eventos no mesmo local/data

Quando há uma nova tentativa de registrar um evento no sistema, devemos verificar se há conflitos entre eventos que ocorrem no mesmo local e mesma data.

Lógica

  1. Durante o registro de um novo evento, tente obter o endereço no banco de dados.
  2. Se um endereço igual já está cadastrado, obtenha o evento associado.
  3. Compare as datas do evento
    3.1. Caso sejam iguais retorne um erro.

Pesquisar/Filtrar eventos por categoria

Os participantes podem explorar, pesquisar e filtrar eventos com base na categoria.

Observações

  1. Utilizar 'query params'

  2. Rota adequada: /events

  3. Exemplo:

    /events?category=cinema
    
  4. Os parâmetros de filtragem podem ser obtidos em: req.query

  5. É necessário adicionar uma lógica de filtragem em conjunto com o prisma.

Atualizar um evento

Atualizar um evento previamente registrado no banco de dados.

  • Rota: /events/{id}

  • Método HTTP: PUT

  • Formato da requisição:

    {
      "name": "new event name",
      "date": "2023-12-26",
      "description": "new event description",
      "category": "MUSIC",
      "local": {
        "cep": "89010025",
        "state": "SC",
        "city": "Blumenau",
        "neighborhood": "Centro",
        "street": "Rua Doutor Luiz de Freitas Melro",
        "number": "160A",
        "complement": ""
      }
    }

Implementação

  • Controller:
export function updateEvent(eventService) {
    return async (req, res) => {
        ...
    };
}
  • Service:
export class EventService {

    async update(eventId, eventDetails) {
        ...
    }

}

Lógica

  1. Verificar permissões do usuário.
  2. Validar os dados da requisição.
  3. Buscar evento pelo id.
    3.1. Retornar um erro caso não exista.
  4. Atualizar dados do evento e salvar alterações no banco de dados.
  5. Retornar o evento atualizado.

Pesquisar/Filtar eventos por locais

Os participantes podem explorar, pesquisar e filtrar eventos com base nas informações do local.

Observações

  1. Utilizar 'query params'

  2. Rota adequada: /events

  3. Exemplo:

    /events?state=SP
    
  4. Os parâmetros de filtragem podem ser obtidos em: req.query

  5. É necessário adicionar uma lógica de filtragem em conjunto com o prisma.

Buscar categoria

Listar todas as categorias registradas no sistema.

  • Rota: /categories
  • Método HTTP: GET

Implementação

  • Controller:
export function getAllCategories(categoryService) {
    return async (req, res) => {
        ...
    };
}
  • Service:
export class CategoryService {

    async getAll() {
        ...
    }

}

Lógica

  1. Buscar todas as categorias no banco de dados.
  2. Retornar a lista de categorias com o status HTTP adequado.

Pesquisar/Filtar eventos por data

Os participantes podem explorar, pesquisar e filtrar eventos com base na data do evento.

Observações

  1. Utilizar 'query params'

  2. Rota adequada: /events

  3. Exemplo:

    /events?date=2023-12-25
    /events?startDate=2023-12-25&endDate=2024-01-01
    
  4. Os parâmetros de filtragem podem ser obtidos em: req.query

  5. É necessário adicionar uma lógica de filtragem em conjunto com o prisma.

Listar eventos

Listar os eventos registrados no sistema.

  • Rota: /events
  • Método HTTP: GET

Implementação

  • Controller:
export function getAllEvents(eventService) {
    return async (req, res) => {
        ...
    };
}
  • Service:
export class EventService {

    async getAll() {
        ...
    }

}

Lógica

  1. Buscar os eventos no banco de dados.
  2. Retornar a lista de eventos com o status HTTP adequado.

Criar uma categoria

Uma nova categoria deve ser registrada do sistema.

  • Rota: /categories

  • Método HTTP: POST

  • Formato da requisição:

    {
      "name": "category name",
    }

Implementação

  • Controller:
export function createCategory(categoryService) {
    return async (req, res) => {
        ...
    };
}
  • Service:
export class CategoryService {

    async create(name) {
        ...
    }

}

Lógica

  1. Verificar permissões do usuário.
  2. Validar dados da requisição.
  3. Criar uma nova categoria no banco de dados.
    3.1. Adicionar verificação para não criar categorias repetidas.
  4. Retornar a categoria recém-criada.

Criar um evento

Um novo evento deve ser registrado do sistema.

  • Rota: /events

  • Método HTTP: POST

  • Formato da requisição:

    {
      "name": "event name",
      "date": "2023-12-25",
      "description": "event description",
      "category": "MUSIC",
      "local": {
        "cep": "89010025",
        "state": "SC",
        "city": "Blumenau",
        "neighborhood": "Centro",
        "street": "Rua Doutor Luiz de Freitas Melro"
        "number": "160A"
        "complement": "" // optional
      }
    }

Implementação

  • Controller:
export function createEvent(eventService) {
    return async (req, res) => {
        ...
    };
}
  • Service:
export class EventService {

    async create(eventDetails) {
        ...
    }

}

Lógica

  1. Obter os dados da requisição e passar para o serviço responsável pela lógica da aplicação.
  2. Validar os dados da requisição.
  3. Criar um novo evento no banco de dados associando a categoria e local.
  4. Retornar o evento recém-criado com o status HTTP adequado.

Deletar categoria

Remover uma categoria previamente registrada no banco de dados.

  • Rota: /categories/{id}
  • Método HTTP: DELETE

Implementação

  • Controller:
export function deleteCategory(categoryService) {
    return async (req, res) => {
        ...
    };
}
  • Service:
export class CategoryService {

    async delete(categoryId) {
        ...
    }

}

Lógica

  1. Verificar permissões do usuário.
  2. Buscar categoria pelo id.
    2.1. Retornar um erro caso não exista.
  3. Remover categoria do banco de dados.
  4. Retornar o status 204 (No Content).

Buscar categoria por id

Buscar uma categoria registrada no sistema.

  • Rota: /categories/{id}
  • Método HTTP: GET

Implementação

  • Controller:
export function getCategoryById(categoryService) {
    return async (req, res) => {
        ...
    };
}
  • Service:
export class CategoryService {

    async getById(categoryId) {
        ...
    }

}

Lógica

  1. Buscar a categoria no banco de dados.
  2. Retornar a categoria com o status HTTP adequado.

Deletar um evento

Remover um evento previamente registrado no banco de dados.

  • Rota: /events/{id}
  • Método HTTP: DELETE

Implementação

  • Controller:
export function deleteEvent(eventService) {
    return async (req, res) => {
        ...
    };
}
  • Service:
export class EventService {

    async delete(eventId) {
        ...
    }

}

Lógica

  1. Verificar permissões do usuário.
  2. Buscar evento pelo id.
    2.1. Retornar um erro caso não exista.
  3. Remover evento do banco de dados.
  4. Retornar o status 204 (No Content).

Buscar evento por id

Buscar um evento registrado no sistema.

  • Rota: /events/{id}
  • Método HTTP: GET

Implementação

  • Controller:
export function getEventById(eventService) {
    return async (req, res) => {
        ...
    };
}
  • Service:
export class EventService {

    async getById(eventId) {
        ...
    }

}

Lógica

  1. Buscar o evento no banco de dados.
  2. Retornar o evento com o status HTTP adequado.

Atualizar categoria

Atualizar uma categoria previamente registrada no banco de dados.

  • Rota: /categories/{id}

  • Método HTTP: PUT

  • Formato da requisição:

    {
      "name": "new category name",
    }

Implementação

  • Controller:
export function updateCategory(categoryService) {
    return async (req, res) => {
        ...
    };
}
  • Service:
export class CategoryService {

    async update(categoryId, name) {
        ...
    }

}

Lógica

  1. Verificar permissões do usuário.
  2. Validar os dados da requisição.
  3. Buscar categoria pelo id.
    3.1. Retornar um erro caso não exista.
  4. Atualizar dados da categoria e salvar alterações no banco de dados.
  5. Retornar a categoria atualizada.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.