package io.budgetapp.model; import io.budgetapp.model.form.budget.AddBudgetForm; import com.fasterxml.jackson.annotation.JsonIgnore; import javax.persistence.*; import java.io.Serializable; import java.util.Date; /** * */ @Entity @Table(name = "budgets") public class Budget implements Serializable { private static final long serialVersionUID = 2625666273036891436L; private Long id; private String name; private double projected; private double actual; private Date period; private Date createdAt; private User user; private Category category; private BudgetType budgetType; public Budget() { } public Budget(long budgetId) { this.id = budgetId; } public Budget(AddBudgetForm budgetForm) { setName(budgetForm.getName()); setProjected(budgetForm.getProjected()); setCategory(new Category(budgetForm.getCategoryId())); } @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getProjected() { return projected; } public void setProjected(double projected) { this.projected = projected; } public double getActual() { return actual; } public void setActual(double actual) { this.actual = actual; } @Temporal(TemporalType.TIMESTAMP) @Column(name = "period_on", nullable = false, updatable = false) public Date getPeriod() { return period; } public void setPeriod(Date period) { this.period = period; } @Temporal(TemporalType.TIMESTAMP) @Column(name = "created_at", insertable = false, nullable = false, updatable = false) public Date getCreatedAt() { return createdAt; } public void setCreatedAt(Date createdAt) { this.createdAt = createdAt; } @JsonIgnore @JoinColumn(updatable = false) @ManyToOne(optional = false, fetch = FetchType.LAZY) public User getUser() { return user; } public void setUser(User user) { this.user = user; } @JoinColumn(updatable = false) @ManyToOne(optional = false, fetch = FetchType.LAZY) public Category getCategory() { return category; } public void setCategory(Category category) { this.category = category; } @JoinColumn(name = "type_id", updatable = false) @ManyToOne(optional = false, fetch = FetchType.LAZY) public BudgetType getBudgetType() { return budgetType; } public void setBudgetType(BudgetType budgetType) { this.budgetType = budgetType; } @Override public String toString() { final StringBuilder sb = new StringBuilder("Budget{"); sb.append("id=").append(id); sb.append(", actual=").append(actual); sb.append(", name='").append(name).append('\''); sb.append(", createdAt=").append(createdAt); sb.append(", user=").append(user); sb.append(", category=").append(category); sb.append('}'); return sb.toString(); } }