-
-
Notifications
You must be signed in to change notification settings - Fork 246
/
Copy pathmodels.moon
57 lines (46 loc) · 1.27 KB
/
models.moon
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
import Model, enum from require "lapis.db.mysql.model"
import types, create_table from require "lapis.db.mysql.schema"
import drop_tables, truncate_tables from require "lapis.spec.db"
class Users extends Model
@create_table: =>
drop_tables @
create_table @table_name!, {
{"id", types.id}
{"name", types.text}
}
@truncate: =>
truncate_tables @
class Posts extends Model
@timestamp: true
@create_table: =>
drop_tables @
create_table @table_name!, {
{"id", types.id}
{"user_id", types.integer null: true}
{"title", types.text null: false}
{"body", types.text null: false}
{"created_at", types.datetime}
{"updated_at", types.datetime}
}
@truncate: =>
truncate_tables @
class Likes extends Model
@primary_key: {"user_id", "post_id"}
@timestamp: true
@relations: {
{"user", belongs_to: "Users"}
{"post", belongs_to: "Posts"}
}
@create_table: =>
drop_tables @
create_table @table_name!, {
{"user_id", types.integer}
{"post_id", types.integer}
{"count", types.integer default: 0}
{"created_at", types.datetime}
{"updated_at", types.datetime}
"PRIMARY KEY (user_id, post_id)"
}
@truncate: =>
truncate_tables @
{:Users, :Posts, :Likes}