Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • Comunicacao HSL Wiki Comunicacao HSL Wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Comunicacao HSL
  • Comunicacao HSL WikiComunicacao HSL Wiki
  • Wiki
  • banco_dados

Last edited by lucas.rosa Oct 27, 2021
Page history

banco_dados

Home Escopo e Cronograma Processo Design/Mockups Configuração Arquitetura Código BD Qualidade Utilização Instruções AWS

Banco de Dados

Descrição

Para o desenvolvimento do projeto, a tecnologia de banco de dados escolhida foi SQL (Structured Querying Language), ou seja, um banco de dados relacional. Utilizamos o PostgreSQL, que resolve tecnicamente as necessidades do projeto como, comportar a estrutura de dados (que é simples e raramente precisará de alterações). Em função de o projeto ter um eventual lançamento pelo Hospital São Lucas da PUCRS, o PostgreSQL acaba por ser uma ótima opção, pois a infraestrutura de sistemas de T.I. do hospital é mantida pelo mesmo departamento que mantém a da universidade e este departamento já está acostumado a usar o PostgreSQL.

Outro ponto importante para a decisão pelo PostgreSQL, é a fácil integração com aplicações Java utilizando o JPA para gerar e integrar o banco de dados à aplicação. O JPA (Java Persistance API) é um framework utilizado para persistir os objetos Java, fazendo o Mapeamento Objeto-Relacional., ou ORM. Ela permite que sejam feitas querys através de uma linguagem específica, a JPQL e retornar os dados já em forma de objetos Java.

Sumário

  • Modelagem
    • Esquema Conceitual
    • Esquema Lógico
  • Implementação
    • Postgrees

Modelagem

Esquema Conceitual

  • Download do arquivo em formato brModelo (.brM3): Baixar ConceitualHSL.brM3

Esquema Lógico

  • Link para visualizar o projeto (Lucid Chart): Clique aqui

Implementação

Schemas

Announcements

@Entity
@Table(name = "announcements")
@Data
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@Proxy(lazy = false)
public class Announcement {
    @Id
    @Column(nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "idDepartment", referencedColumnName="id")
    private Department department;

    @Column(nullable = false)
    private String title;

    @Column(nullable = false)
    private String content;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "idAttachment")
    private List<Attachment> attachments;

    @Column(nullable = false)
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm", iso = DateTimeFormat.ISO.DATE_TIME)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm")
    private LocalDateTime date;

    @Transient
    private boolean viewed;
}

Attachments

@Entity
@Table(name = "attachments")
@Data
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@Proxy(lazy = false)
public class Attachment {
    @Id
    @Column
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column
    private String fileName;

    @Transient
    private String contentAsBase64;
}

Departments

@Entity
@Table(name = "departments")
@Data
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@Proxy(lazy = false)
public class Department {

    @Id
    @Column(nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private String branchLine;

    @Column(nullable = false)
    private String email;

}

Users

@Entity
@Table(name = "users")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@Proxy(lazy = false)
public class User {
    @Id
    @Column(nullable = false)
    private Long registry;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private boolean isAdmin;

    @Column(nullable = false)
    private int day;

    @Column(nullable = false)
    private int month;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "idDepartment", referencedColumnName = "id")
    private Department department;

    @Column
    private boolean active;

    @Column
    private String email;

    @Column
    private String phone;

    @Column
    @JsonIgnore
    private String mobileEndpointArn;

    @Column
    @JsonIgnore
    private String mobileEndpointSubscriptionArn;

    @Column(nullable = false)
    private String occupation;
}

UserAnnouncementViews

@Entity
@Table(name = "users_announcements_view")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserAnnouncementView {

    @Id
    @Column(nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
    @JoinColumn(name = "idUser", referencedColumnName = "registry")
    private User user;

    @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
    @JoinColumn(name = "idAnnouncement", referencedColumnName = "id")
    private Announcement announcement;

    @Column
    private boolean viewed;
}
Clone repository
  • Utilizando a wiki
    • adicionando imagens
    • escrevendo em markdown
    • wiki no editor de texto
  • arquitetura
  • banco_dados
  • codigo
  • configuracao
  • design_mockups
  • escopo
  • Home
  • instrucoes
  • instrucoesAws
  • processo
  • qualidade
  • utilizacao