| ... | ... | @@ -32,20 +32,176 @@ Para o desenvolvimento do projeto, a tecnologia de banco de dados escolhida foi | 
| 
 | 
 | 
<img src="https://tools.ages.pucrs.br/comunicacao-hsl/comunicacao-hsl-wiki/raw/master/Images/db_diagrams/ModeloLogicoRelacional.png">
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
TBD
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## Implementação
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
TBD
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### Knex
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
TBD
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### Schemas
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
TBD
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
#### Postgrees
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
TBD | 
| 
 | 
 | 
**Announcements**
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```java
 | 
| 
 | 
 | 
@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**
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```java
 | 
| 
 | 
 | 
@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**
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```java
 | 
| 
 | 
 | 
@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**
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```java
 | 
| 
 | 
 | 
@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**
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```java
 | 
| 
 | 
 | 
@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;
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
``` | 
 | 
 | 
\ No newline at end of file |