Use Gitea Releases for installation and ship VS Code highlighting
This commit is contained in:
1 parent
a46bd6e132
commit
201bdee372
243 files changed
+3289
-12521
No files matched your search
@@ -0,0 +1,150 @@
|
||||
public type UserStatus {
|
||||
Pending
|
||||
Active
|
||||
Disabled(reason: Text)
|
||||
}
|
||||
|
||||
public type CreateInput {
|
||||
id: Id
|
||||
name: Text
|
||||
email: Text
|
||||
phone: Text?
|
||||
score: Int
|
||||
labels: Map<Text, Text>
|
||||
}
|
||||
|
||||
public type CreateResult {
|
||||
Created(user: User)
|
||||
InvalidName(reason: Text)
|
||||
InvalidEmail(reason: Text)
|
||||
}
|
||||
|
||||
public type User {
|
||||
id: Id
|
||||
name: Text
|
||||
email: Text
|
||||
phone: Text?
|
||||
score: Int
|
||||
labels: Map<Text, Text>
|
||||
status: UserStatus
|
||||
}
|
||||
|
||||
public type UserView {
|
||||
id: Id
|
||||
name: Text
|
||||
email: Text
|
||||
phone: Text
|
||||
score: Int
|
||||
can_sign_in: Bool
|
||||
}
|
||||
|
||||
public create(input: CreateInput) (result: CreateResult) {
|
||||
normalized = normalize(input)
|
||||
result = create_name(normalized, normalized.name)
|
||||
}
|
||||
|
||||
normalize(input: CreateInput) (result: CreateInput) {
|
||||
result = input
|
||||
result.name = text.trim(input.name)
|
||||
result.email = text.lower(text.trim(input.email))
|
||||
}
|
||||
|
||||
create_name(input: CreateInput, name: "") (result: CreateResult) {
|
||||
result = CreateResult.InvalidName("name is required")
|
||||
}
|
||||
|
||||
create_name(input: CreateInput, name: other) (result: CreateResult) {
|
||||
result = create_email(input, name, input.email)
|
||||
}
|
||||
|
||||
create_email(input: CreateInput, name: Text, email: "") (result: CreateResult) {
|
||||
result = CreateResult.InvalidEmail("email is required")
|
||||
}
|
||||
|
||||
create_email(input: CreateInput, name: Text, email: other) (result: CreateResult) {
|
||||
user = User {
|
||||
id = input.id
|
||||
name = name
|
||||
email = email
|
||||
phone = input.phone
|
||||
score = input.score
|
||||
labels = input.labels
|
||||
status = UserStatus.Pending
|
||||
}
|
||||
result = CreateResult.Created(user)
|
||||
}
|
||||
|
||||
public activate(user: User) (result: User) {
|
||||
result = user
|
||||
result.status = UserStatus.Active
|
||||
}
|
||||
|
||||
public disable(user: User, reason: Text) (result: User) {
|
||||
result = user
|
||||
result.status = UserStatus.Disabled(reason)
|
||||
}
|
||||
|
||||
public can_sign_in(status: UserStatus.Active) (allowed: Bool) {
|
||||
allowed = true
|
||||
}
|
||||
|
||||
public can_sign_in(status: other) (allowed: Bool) {
|
||||
allowed = false
|
||||
}
|
||||
|
||||
phone_text(phone: Text) (result: Text) {
|
||||
result = phone
|
||||
}
|
||||
|
||||
phone_text(phone: null) (result: Text) {
|
||||
result = "Not provided"
|
||||
}
|
||||
|
||||
public to_view(user: User) (view: UserView) {
|
||||
view = UserView {
|
||||
id = user.id
|
||||
name = user.name
|
||||
email = user.email
|
||||
phone = phone_text(user.phone)
|
||||
score = user.score
|
||||
can_sign_in = can_sign_in(user.status)
|
||||
}
|
||||
}
|
||||
|
||||
public to_views(users: List<User>) (views: List<UserView>) {
|
||||
views = each(to_view, users)
|
||||
}
|
||||
|
||||
is_active(user: User) (result: Bool) {
|
||||
result = can_sign_in(user.status)
|
||||
}
|
||||
|
||||
public active_views(users: List<User>) (views: List<UserView>) {
|
||||
active = filter(is_active, users)
|
||||
views = each(to_view, active)
|
||||
}
|
||||
|
||||
has_id(user: User, expected: Id) (matches: Bool) {
|
||||
matches = user.id == expected
|
||||
}
|
||||
|
||||
public find_user(users: List<User>, id: Id) (user: User?) {
|
||||
user = find(has_id, users, id)
|
||||
}
|
||||
|
||||
public put_label(user: User, key: Text, value: Text) (result: User) {
|
||||
result = user
|
||||
result.labels = put(user.labels, key, value)
|
||||
}
|
||||
|
||||
public label(user: User, key: Text) (value: Text?) {
|
||||
value = get(user.labels, key)
|
||||
}
|
||||
|
||||
score_bonus(user: User, rate: Decimal) (amount: Decimal) {
|
||||
amount = user.score * rate
|
||||
}
|
||||
|
||||
public total_score_bonus(users: List<User>, rate: Decimal) (total: Decimal) {
|
||||
total = sum(score_bonus, users, rate)
|
||||
}
|
||||
Reference in new issue
Block a user