invoicer initial version

Change-Id: Ib20a96c224f5c055874f72f8f9a04a4dc8bbbc24
diff --git a/personal/arsenicum/invoicer/src/main/java/pl/hackerspace/domain/Client.java b/personal/arsenicum/invoicer/src/main/java/pl/hackerspace/domain/Client.java
new file mode 100644
index 0000000..2dab10f
--- /dev/null
+++ b/personal/arsenicum/invoicer/src/main/java/pl/hackerspace/domain/Client.java
@@ -0,0 +1,69 @@
+package pl.hackerspace.domain;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.Table;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Set;
+
+@Entity
+@Table(name = "client")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class Client {
+
+    @Id
+    private String nip;
+
+    @Column(nullable = false)
+    private String name;
+
+    @Column(nullable = false)
+    private String email;
+
+    private String addressLine1;
+    private String addressLine2;
+
+    @Column(nullable = false)
+    private String serviceName;
+
+    @Column(nullable = false)
+    private BigDecimal price;
+
+    @Builder.Default
+    @Column(nullable = false)
+    private BigDecimal amount = BigDecimal.valueOf(1);
+
+    @Builder.Default
+    @Column(nullable = false)
+    private BigDecimal vat = BigDecimal.valueOf(23);
+
+    @Builder.Default
+    @Column(nullable = false)
+    private int paymentOffsetDays = 14;
+
+    @Builder.Default
+    private boolean subscriber = true;
+
+    private boolean prepaid;
+
+    @OneToMany(mappedBy="client")
+    Set<Invoice> invoices;
+
+    public byte[] getInvoiceForSubscriptionMonth(String monthOfInvoice) {
+        return invoices.stream()
+                .filter(i -> monthOfInvoice.equals(i.getMonthOfSubscription()))
+                .map(Invoice::getPdfContent)
+                .findFirst()
+                .orElse(null);
+    }
+}
diff --git a/personal/arsenicum/invoicer/src/main/java/pl/hackerspace/domain/Invoice.java b/personal/arsenicum/invoicer/src/main/java/pl/hackerspace/domain/Invoice.java
new file mode 100644
index 0000000..e32f5fe
--- /dev/null
+++ b/personal/arsenicum/invoicer/src/main/java/pl/hackerspace/domain/Invoice.java
@@ -0,0 +1,41 @@
+package pl.hackerspace.domain;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Entity
+@Table(name = "invoice")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class Invoice {
+
+    @Id
+    private long id;
+
+    @Column(nullable = false)
+    private String invoiceTitle;
+
+    private String monthOfSubscription;
+
+    @Column(nullable = false)
+    private LocalDateTime creationDate;
+
+    @Column(columnDefinition = "VARBINARY(50000)", nullable = false)
+    private byte[] pdfContent;
+
+    @ManyToOne
+    @JoinColumn(nullable = false)
+    private Client client;
+}