Peace/lib/Peace/Controller/Developer.pm

91 lines
2.0 KiB
Perl

package Peace::Controller::Developer;
use Mojo::Base 'Mojolicious::Controller';
use v5.30.0;
use strict;
use warnings;
use Data::Dumper;
use Const::Fast;
use Peace::Swagger;
use Crypt::Bcrypt qw/bcrypt/;
use Crypt::URandom qw/urandom/;
use Peace;
use Peace::DB;
use Peace::Model::Developer;
use Peace::DAO::Developer;
const my $swagger => Peace::Swagger->new;
sub post {
my $self = shift;
my $json = $self->req->json;
my $peace = Peace->new;
my $config = $peace->peace_config;
print Data::Dumper::Dumper $config;
my $dbh = Peace::DB->dbh( config => $config );
my $developer_dao = Peace::DAO::Developer->new( dbh => $dbh );
unless ( defined $json ) {
$self->render( text => 'body is not a json', status => '400' );
return;
}
my $spec = $swagger->developer_post;
eval { $swagger->validate_request( json => $json, spec => $spec, ); };
if ($@) {
$self->render( text => $@, status => '400' );
return;
}
my $secret = delete $json->{secret};
my $secret_bcrypt = bcrypt( $secret, '2b', 12, urandom(16) );
$json->{secret_bcrypt} = $secret_bcrypt;
$json->{verified} = 0;
my $developer = Peace::Model::Developer->new(%$json);
eval {
$developer_dao->create( developer => $developer );
};
if ($@) {
$self->render( status => 400, text => $@ );
return;
}
$self->render( json => $developer->to_json() );
}
1;
=encoding utf8
=head1 NAME
Peace::Controller::Developer - Developer's http endpoint.
=head1 SYNOPSIS
# This object is used by mojolicious.
=head1 DESCRIPTION
Peace::Controller::Developer allows to interact using
a json http api with the L<Peace::Model::Developer> objects
in Peace.
=head1 METHODS
Peace::Controller::Developer implements the following methods:
=head2 post
# To be used by mojolicious.
Creates a Developer in db with the data given by the user.
=head1 SEE ALSO
L<Peace::Model::Developer>, L<Peace::DAO::Developer>
=cut