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
|
# File 'lib/better_auth/plugins/organization/schema.rb', line 8
def build(config)
schema = {
organization: {
model_name: "organizations",
fields: {
name: {type: "string", required: true, sortable: true},
slug: {type: "string", required: true, unique: true, sortable: true, index: true},
logo: {type: "string", required: false},
metadata: {type: "string", required: false},
createdAt: {type: "date", required: true, default_value: -> { Time.now }},
updatedAt: {type: "date", required: false, on_update: -> { Time.now }}
}
},
member: {
model_name: "members",
fields: {
organizationId: {type: "string", required: true, references: {model: "organization", field: "id"}, index: true},
userId: {type: "string", required: true, references: {model: "user", field: "id"}, index: true},
role: {type: "string", required: true, default_value: "member", sortable: true},
createdAt: {type: "date", required: true, default_value: -> { Time.now }}
}
},
invitation: {
model_name: "invitations",
fields: {
organizationId: {type: "string", required: true, references: {model: "organization", field: "id"}, index: true},
email: {type: "string", required: true, sortable: true, index: true},
role: {type: "string", required: true, sortable: true},
status: {type: "string", required: true, sortable: true, default_value: "pending"},
expiresAt: {type: "date", required: true},
createdAt: {type: "date", required: true, default_value: -> { Time.now }},
inviterId: {type: "string", required: true, references: {model: "user", field: "id"}}
}
},
session: {
fields: {
activeOrganizationId: {type: "string", required: false}
}
}
}
if truthy?(config.dig(:teams, :enabled))
schema[:team] = {
model_name: "teams",
fields: {
name: {type: "string", required: true},
organizationId: {type: "string", required: true, references: {model: "organization", field: "id"}, index: true},
createdAt: {type: "date", required: true, default_value: -> { Time.now }},
updatedAt: {type: "date", required: false, on_update: -> { Time.now }}
}
}
schema[:teamMember] = {
model_name: "team_members",
fields: {
teamId: {type: "string", required: true, references: {model: "team", field: "id"}, index: true},
userId: {type: "string", required: true, references: {model: "user", field: "id"}, index: true},
createdAt: {type: "date", required: false, default_value: -> { Time.now }}
}
}
schema[:invitation][:fields][:teamId] = {type: "string", required: false, sortable: true}
schema[:session][:fields][:activeTeamId] = {type: "string", required: false}
end
if truthy?(config.dig(:dynamic_access_control, :enabled))
schema[:organizationRole] = {
model_name: "organization_roles",
fields: {
organizationId: {type: "string", required: true, references: {model: "organization", field: "id"}, index: true},
role: {type: "string", required: true, index: true},
permission: {type: "string", required: true},
createdAt: {type: "date", required: true, default_value: -> { Time.now }},
updatedAt: {type: "date", required: false, on_update: -> { Time.now }}
}
}
end
merge_custom_schema(schema, config[:schema])
end
|