-
Notifications
You must be signed in to change notification settings - Fork 0
/
specsAndEntities.drawio
102 lines (102 loc) · 12.6 KB
/
specsAndEntities.drawio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<mxfile host="65bd71144e">
<diagram id="eo345mvX9ulXolHrMmK3" name="Page-1">
<mxGraphModel dx="1047" dy="647" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="2" value="Transaction" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;html=1;" parent="1" vertex="1">
<mxGeometry x="201" y="110" width="189" height="330" as="geometry"/>
</mxCell>
<mxCell id="5" value="id" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="2" vertex="1">
<mxGeometry y="26" width="189" height="26" as="geometry"/>
</mxCell>
<mxCell id="3" value="type : string " expense | income"" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="2" vertex="1">
<mxGeometry y="52" width="189" height="26" as="geometry"/>
</mxCell>
<mxCell id="9" value="name?" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="2" vertex="1">
<mxGeometry y="78" width="189" height="26" as="geometry"/>
</mxCell>
<mxCell id="20" value="category?" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="2" vertex="1">
<mxGeometry y="104" width="189" height="26" as="geometry"/>
</mxCell>
<mxCell id="4" value="amount : number" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="2" vertex="1">
<mxGeometry y="130" width="189" height="32" as="geometry"/>
</mxCell>
<mxCell id="6" value="date" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="2" vertex="1">
<mxGeometry y="162" width="189" height="26" as="geometry"/>
</mxCell>
<mxCell id="21" value="amount : number" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="2" vertex="1">
<mxGeometry y="188" width="189" height="32" as="geometry"/>
</mxCell>
<mxCell id="66" value="currency" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="2" vertex="1">
<mxGeometry y="220" width="189" height="26" as="geometry"/>
</mxCell>
<mxCell id="37" value="userContributions : [ { userId: 123, amount: 1000 } , {...} ]" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="2" vertex="1">
<mxGeometry y="246" width="189" height="32" as="geometry"/>
</mxCell>
<mxCell id="8" value="updatedAt :date" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="2" vertex="1">
<mxGeometry y="278" width="189" height="26" as="geometry"/>
</mxCell>
<mxCell id="7" value="createdAt :date" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="2" vertex="1">
<mxGeometry y="304" width="189" height="26" as="geometry"/>
</mxCell>
<mxCell id="11" value="Payment" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;html=1;" parent="1" vertex="1">
<mxGeometry x="451" y="110" width="140" height="240" as="geometry"/>
</mxCell>
<mxCell id="12" value="id" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="11" vertex="1">
<mxGeometry y="26" width="140" height="26" as="geometry"/>
</mxCell>
<mxCell id="13" value="name?" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="11" vertex="1">
<mxGeometry y="52" width="140" height="26" as="geometry"/>
</mxCell>
<mxCell id="15" value="date" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="11" vertex="1">
<mxGeometry y="78" width="140" height="26" as="geometry"/>
</mxCell>
<mxCell id="18" value="userOwner&nbsp;&nbsp;: User" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="11" vertex="1">
<mxGeometry y="104" width="140" height="26" as="geometry"/>
</mxCell>
<mxCell id="62" value="userReceiver&nbsp; : User" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="11" vertex="1">
<mxGeometry y="130" width="140" height="26" as="geometry"/>
</mxCell>
<mxCell id="19" value="amount : number" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="11" vertex="1">
<mxGeometry y="156" width="140" height="32" as="geometry"/>
</mxCell>
<mxCell id="16" value="createdAt :date" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="11" vertex="1">
<mxGeometry y="188" width="140" height="26" as="geometry"/>
</mxCell>
<mxCell id="17" value="updatedAt :date" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="11" vertex="1">
<mxGeometry y="214" width="140" height="26" as="geometry"/>
</mxCell>
<mxCell id="23" value="User" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;html=1;" parent="1" vertex="1">
<mxGeometry x="451" y="430" width="140" height="156" as="geometry"/>
</mxCell>
<mxCell id="24" value="id" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="23" vertex="1">
<mxGeometry y="26" width="140" height="26" as="geometry"/>
</mxCell>
<mxCell id="25" value="name" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="23" vertex="1">
<mxGeometry y="52" width="140" height="26" as="geometry"/>
</mxCell>
<mxCell id="26" value="email" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="23" vertex="1">
<mxGeometry y="78" width="140" height="26" as="geometry"/>
</mxCell>
<mxCell id="32" value="updatedAt :date" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="23" vertex="1">
<mxGeometry y="104" width="140" height="26" as="geometry"/>
</mxCell>
<mxCell id="33" value="createdAt :date" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="23" vertex="1">
<mxGeometry y="130" width="140" height="26" as="geometry"/>
</mxCell>
<mxCell id="35" value="<div><u style="background-color: initial;">Each user must be able to:</u><br></div><div>-Create, modify, delete expenses and payments</div><div style="text-align: left;"><span style="background-color: initial;">-Check&nbsp;</span><span style="background-color: initial;">accumulated&nbsp;</span><span style="background-color: initial;">expenses in the month</span></div>" style="shape=delay;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="196" y="30" width="404" height="60" as="geometry"/>
</mxCell>
<mxCell id="36" style="edgeStyle=none;html=1;endArrow=none;endFill=0;" parent="1" source="9" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="451" y="201" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="65" value="<h1><br></h1><div>Income is simply the reversal of an expense (e.g. the returning of a rent bond)</div><div><br></div><div>It will be used to diminish the expenses when displaying aggregated data and to settle debts</div><div><br></div><div>The app is not meant to track income, that is why there is no money receipt (opposite of Payment) as well</div><div><br></div><div>Expenses should be a positive number, and income a negative one</div><div><br></div><div>Consider implementing some kind of double entry ledger library</div>" style="text;html=1;strokeColor=none;fillColor=none;spacing=5;spacingTop=-20;whiteSpace=wrap;overflow=hidden;rounded=0;" parent="1" vertex="1">
<mxGeometry x="11" y="70" width="190" height="379" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>