source: ProjectBuilder/devel/pb-server/lib/ProjectBuilder/Controller/Conf.pm@ 2077

Last change on this file since 2077 was 2077, checked in by Bruno Cornec, 8 years ago

First attempt to add a Mojolicious web app with swagger providing a RESTful API for pb

File size: 2.4 KB
Line 
1package ProjectBuilder::Controller::Conf;
2use Mojo::Base 'Mojolicious::Controller';
3use Data::Dumper;
4
5sub create { shift->stash(conf => {}) }
6
7sub edit {
8 my $self = shift; # Web request
9 $self->stash(conf => $self->confs->find($self->param('id')));
10}
11
12sub list {
13 my ($self, $args, $cb) = @_;
14
15 if ($cb) { # Swagger2 request
16 #print "SELF: ".Dumper($self)."\n";
17 #print "ARGS ".Dumper($args)."\n";
18 #print "CB ".Dumper($cb)."\n";
19 $self->$cb($self->confs->all, 200);
20 }
21 else { # Web request
22 $self->render(confs => $self->confs->all);
23 }
24}
25
26sub remove {
27 my ($self, $args, $cb) = @_;
28
29 if ($cb) { # Swagger2 request
30 $self->confs->remove($args->{id});
31 $self->$cb({}, 200);
32 }
33 else { # Web request
34 $self->confs->remove($self->param('id'));
35 $self->redirect_to('confs');
36 }
37}
38
39sub show {
40 my ($self, $args, $cb) = @_;
41
42 if ($cb) { # Swagger2 request
43 my $entry = $self->confs->find($args->{id});
44 return $self->$cb($entry, 200) if $entry;
45 return $self->$cb({errors => [{message => 'ProjectBuilder conf not found.', path => '/id'}]}, 404);
46 }
47 else { # Web request
48 $self->render(conf => $self->confs->find($self->param('id')));
49 }
50}
51
52sub store {
53 my ($self, $args, $cb) = @_;
54 my $validation = $self->_validation($args->{entry});
55
56 if ($cb) { # Swagger2 request
57 $args->{entry}{id} = int $self->confs->add($validation->output);
58 return $self->$cb($args->{entry}, 200);
59 }
60 else { # Web request
61 return $self->render(action => 'create', conf => {}) if $validation->has_error;
62 my $id = $self->confs->add($validation->output);
63 return $self->redirect_to('show_conf', id => $id);
64 }
65}
66
67sub update {
68 my ($self, $args, $cb) = @_;
69 my $validation = $self->_validation($args->{entry});
70
71 if ($cb) { # Swagger2 request
72 $self->confs->save($args->{id}, $validation->output);
73 return $self->$cb({}, 200);
74 }
75 else { # Web request
76 return $self->render(action => 'edit', conf => {}) if $validation->has_error;
77 my $id = $self->param('id');
78 $self->confs->save($id, $validation->output);
79 $self->redirect_to('show_conf', id => $id);
80 }
81}
82
83sub _validation {
84 my ($self, $input) = @_;
85
86 my $validation = $self->validation;
87 $validation->input($input) if $input;
88 $validation->required('title');
89 $validation->required('body');
90
91 return $validation;
92}
93
941;
Note: See TracBrowser for help on using the repository browser.