Skip to content
Snippets Groups Projects
Verified Commit 6ca8fb87 authored by Andrej Ramašeuski's avatar Andrej Ramašeuski
Browse files

Podpora jibri

parent 3daedda1
No related branches found
No related tags found
No related merge requests found
Pipeline #20311 passed
package SeMeet::Controller::Records;
use Mojo::Base 'Mojolicious::Controller', -signatures;
use constant FILENAME_REGEX => qr/(.+)_(\d{4})\-(\d{2})\-(\d{2})\-(\d{2})\-(\d{2})\-(\d{2})\.mp4/;
sub create($c) {
$c->openapi->valid_input or return;
my $args = $c->req->json;
# datum meetu
if ($args->{file} !~ FILENAME_REGEX) {
return $c->error(400, 'INVALID FILENAME');
}
my $recorded = "$2-$3-$4 $5:$6:$7";
# Duplicita id
my $exists = $c->schema->resultset('Record')->count({
deleted => undef,
uuid => $args->{uuid},
});
return $c->error(400, 'DUPLICTE UUID') if $exists;
# meet
my $meet_uuid = $args->{meeting_url};
$meet_uuid =~ s/.+\///;
my $meet = $c->schema->resultset('Meet')->search({
uuid => $meet_uuid
})->first;
return $c->error(400, 'MEET NOT FOUND') if ! $meet;
my $guard = $c->schema->txn_scope_guard;
$meet->add_to_records({
uuid => $args->{uuid},
file => $args->{file},
recorded => $recorded,
});
$guard->commit;
# $c->trace(\'Record %s create meet "%s" with id %d',
# $c->stash->{user}->username,
# $meet->name,
# $meet->id,
# );
$c->render( status => 204, text => '' );
}
1;
......@@ -70,6 +70,11 @@ __PACKAGE__->has_many(
{ 'foreign.meet_id' => 'self.id', },
);
__PACKAGE__->has_many(
records => 'SeMeet::Schema::Result::Record',
{ 'foreign.meet_id' => 'self.id', },
);
__PACKAGE__->inflate_column('properties', {
inflate => sub { from_json(shift); },
deflate => sub { to_json(shift); },
......
package SeMeet::Schema::Result::Record;
use strict;
use warnings;
use base 'DBIx::Class::Core';
our $VERSION = 1;
__PACKAGE__->table('records');
__PACKAGE__->add_columns(
id => {
data_type => 'integer',
is_auto_increment => 1,
is_nullable => 0,
sequence => 'uid_seq'
},
qw(
uuid
meet_id
deleted
recorded
decription
file
),
);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->add_unique_constraint(
'uuid' => [qw(uuid)]
);
1;
......@@ -505,3 +505,36 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/Invite'
/records:
post:
x-mojo-to: records#create
tags:
- records
summary: "Nový zaznam"
operationId: addRecord
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
uuid:
type: string
description: "Record UUID"
example: "504e4a84-864c-417b-91a9-fc65bb7e15d9"
file:
type: string
description: "Record file"
example: "3ab57b30-7e11-4031-9ef9-429d2054a92e_2024-12-05-21-22-45.mp4"
meeting_url:
type: string
description: "Meeting URL"
example: "https://meet.pirati.cz/3ab57b30-7e11-4031-9ef9-429d2054a92f"
required:
- uuid
- file
- meeting_url
responses:
204:
description: Record created
......@@ -106,3 +106,17 @@ create table "invites" (
foreign key ("meet_id") references "meets" ("id") on update cascade on delete cascade,
foreign key ("user_id") references "users" ("id") on update cascade on delete cascade
);
-- 10 up
create table "records" (
"id" integer not null default nextval('uid_seq'),
"uuid" uuid not null, -- unique string
"meet_id" integer not null,
"deleted" timestamp(0),
"recorded" timestamp(0),
"description" text,
"file" text,
primary key("id"),
unique("uuid"),
foreign key ("meet_id") references "meets" ("id") on update cascade on delete restrict
);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment