202 lines
4.8 KiB
Zig
202 lines
4.8 KiB
Zig
const util = @import("util");
|
|
const services = @import("./services.zig");
|
|
|
|
const Uuid = util.Uuid;
|
|
const DateTime = util.DateTime;
|
|
|
|
fn QueryResult(comptime R: type, comptime A: type) type {
|
|
return struct {
|
|
items: []R,
|
|
|
|
next_page: A,
|
|
prev_page: A,
|
|
};
|
|
}
|
|
|
|
pub const auth = struct {
|
|
pub const RegistrationOptions = struct {
|
|
username: []const u8,
|
|
password: []const u8,
|
|
invite_code: ?[]const u8 = null,
|
|
email: ?[]const u8 = null,
|
|
};
|
|
};
|
|
|
|
pub const actors = struct {
|
|
pub const Actor = struct {
|
|
id: Uuid,
|
|
|
|
username: []const u8,
|
|
host: []const u8,
|
|
|
|
display_name: ?[]const u8,
|
|
bio: []const u8,
|
|
|
|
avatar_file_id: ?Uuid,
|
|
avatar_url: []const u8,
|
|
|
|
header_file_id: ?Uuid,
|
|
header_url: ?[]const u8,
|
|
|
|
profile_fields: []const ProfileField,
|
|
|
|
community_id: Uuid,
|
|
|
|
created_at: DateTime,
|
|
updated_at: DateTime,
|
|
};
|
|
pub const ProfileField = services.actors.ProfileField;
|
|
pub const ProfileUpdateArgs = services.actors.ProfileUpdateArgs;
|
|
};
|
|
|
|
pub const communities = struct {
|
|
pub const Community = services.communities.Community;
|
|
pub const QueryArgs = services.communities.QueryArgs;
|
|
pub const QueryResult = services.communities.QueryResult;
|
|
};
|
|
|
|
pub const drive = struct {
|
|
pub const DriveEntry = union(enum) {
|
|
pub const Kind = services.drive.DriveEntry.Kind;
|
|
dir: struct {
|
|
id: Uuid,
|
|
owner_id: Uuid,
|
|
name: ?[]const u8,
|
|
path: []const u8,
|
|
parent_directory_id: ?Uuid,
|
|
|
|
kind: Kind = .dir,
|
|
|
|
// If null = not enumerated
|
|
children: ?[]const DriveEntry,
|
|
},
|
|
file: struct {
|
|
id: Uuid,
|
|
owner_id: Uuid,
|
|
name: ?[]const u8,
|
|
path: []const u8,
|
|
parent_directory_id: ?Uuid,
|
|
|
|
kind: Kind = .file,
|
|
|
|
meta: files.FileUpload,
|
|
},
|
|
};
|
|
|
|
pub const UploadArgs = struct {
|
|
filename: []const u8,
|
|
dir: []const u8,
|
|
description: ?[]const u8,
|
|
content_type: []const u8,
|
|
sensitive: bool,
|
|
};
|
|
};
|
|
|
|
pub const files = struct {
|
|
pub const FileUpload = services.files.FileUpload;
|
|
pub const UpdateArgs = services.files.UpdateArgs;
|
|
|
|
pub const DerefResult = struct {
|
|
meta: FileUpload,
|
|
data: []const u8,
|
|
};
|
|
};
|
|
|
|
pub const follows = struct {
|
|
pub const Follow = services.follows.Follow;
|
|
|
|
const QueryArgs = struct {
|
|
pub const OrderBy = services.follows.QueryArgs.OrderBy;
|
|
pub const Direction = services.follows.QueryArgs.Direction;
|
|
pub const PageDirection = services.follows.QueryArgs.PageDirection;
|
|
pub const Prev = services.follows.QueryArgs.Prev;
|
|
|
|
max_items: usize = 20,
|
|
|
|
order_by: OrderBy = .created_at,
|
|
|
|
direction: Direction = .descending,
|
|
|
|
prev: ?Prev = null,
|
|
|
|
page_direction: PageDirection = .forward,
|
|
};
|
|
|
|
pub const FollowerQueryArgs = QueryArgs;
|
|
pub const FollowingQueryArgs = QueryArgs;
|
|
|
|
pub const FollowerQueryResult = QueryResult(Follow, FollowerQueryArgs);
|
|
pub const FollowingQueryResult = QueryResult(Follow, FollowingQueryArgs);
|
|
};
|
|
|
|
pub const invites = struct {
|
|
pub const UseCount = services.invites.UseCount;
|
|
pub const Invite = struct {
|
|
id: Uuid,
|
|
|
|
created_by: Uuid, // User ID
|
|
community_id: Uuid,
|
|
name: []const u8,
|
|
code: []const u8,
|
|
url: []const u8,
|
|
|
|
created_at: DateTime,
|
|
times_used: UseCount,
|
|
|
|
expires_at: ?DateTime,
|
|
max_uses: ?UseCount,
|
|
|
|
kind: Kind,
|
|
};
|
|
pub const Kind = services.invites.Kind;
|
|
pub const CreateOptions = struct {
|
|
name: ?[]const u8 = null,
|
|
lifespan: ?DateTime.Duration = null,
|
|
max_uses: ?usize = null,
|
|
|
|
// admin only options
|
|
kind: Kind = .user,
|
|
to_community: ?Uuid = null,
|
|
};
|
|
};
|
|
|
|
pub const notes = struct {
|
|
pub const Note = services.notes.Note;
|
|
pub const QueryArgs = services.notes.QueryArgs;
|
|
};
|
|
|
|
pub const timelines = struct {
|
|
pub const TimelineArgs = struct {
|
|
pub const PageDirection = notes.QueryArgs.PageDirection;
|
|
pub const Prev = notes.QueryArgs.Prev;
|
|
|
|
max_items: usize = 20,
|
|
|
|
created_before: ?DateTime = null,
|
|
created_after: ?DateTime = null,
|
|
|
|
prev: ?Prev = null,
|
|
|
|
page_direction: PageDirection = .forward,
|
|
};
|
|
|
|
pub const TimelineResult = struct {
|
|
items: []notes.Note,
|
|
|
|
prev_page: TimelineArgs,
|
|
next_page: TimelineArgs,
|
|
};
|
|
};
|
|
|
|
pub const tokens = struct {
|
|
pub const Token = struct {
|
|
pub const Info = struct {
|
|
account_id: Uuid,
|
|
issued_at: DateTime,
|
|
};
|
|
|
|
value: []const u8,
|
|
info: Info,
|
|
};
|
|
};
|