package Daje::Workflow::Database::Model::Context; use Mojo::Base -base, -signatures; use v5.40; use Mojo::JSON qw { to_json from_json }; use DBD::Pg ':pg_types'; # NAME # ==== # # Daje::Workflow::Database::Model::Context # # SYNOPSIS # ======== # # use Daje::Workflow::Database::Model::Context; # # my $context_obj = Daje::Workflow::Database::Model::Context->new( # db => $db, # workflow_pkey => $workflow_pkey # context_pkey => $context_pkey, # context => $context, # ); # # my $context = $context_obj->load_fk($self) # # my $context = $context_obj->load_pk($self) # # my $context_pkey = $context_obj->save($self, $context) # # # REQUIRES # ======== # # Mojo::Base> # # DBD::Pg # # # METHODS # ======= # # load_fk($self) # # load_pk($self) # # save($self, $context) # # # LICENSE # ======= # # Copyright (C) janeskil1525. # # This library is free software; you can redistribute it and/or modify # it under the same terms as Perl itself. # # AUTHOR # ====== # # janeskil1525 E<lt>janeskil1525@gmail.comE<gt> # has 'db'; has 'workflow_pkey'; has 'context_pkey'; has 'context'; sub load_pk($self) { my $context = $self->_load_pk(); unless(exists $context->{context_pkey} and $context->{context_pkey} > 0) { $context->{context_pkey} = 0; $context->{workflow_fkey} = $self->workflow_pkey; $context->{context} = $self->context->{context}; my $context_pkey = $self->save($context); $self->context_pkey($context_pkey); $context = $self->_load_pk(); } return $context; } sub _load_pk($self) { my $data = $self->db->select( 'context', ['*'], { context_pkey => $self->context_pkey } ); my $context; $context = $data->hash if $data->rows > 0; if (defined $context and exists $context->{context}) { $context->{context} = from_json($context->{context}); } return $context; } sub load_fk($self) { my $context = $self->_load_fk(); unless(exists $context->{context_pkey} and $context->{context_pkey} > 0) { $context->{context_pkey} = 0; $context->{workflow_fkey} = $self->workflow_pkey; $context->{context} = $self->context->{context}; my $context_pkey = $self->save($context); $self->context_pkey($context_pkey); $context = $self->_load_pk(); } return $context; } sub _load_fk($self) { my $data = $self->db->select( 'context', ['*'], { workflow_fkey => $self->workflow_pkey } ); my $context; $context = $data->hash if $data->rows > 0; if (defined $context and exists $context->{context}) { $context->{context} = from_json($context->{context}); } return $context; } sub save($self, $context) { $context->{context_pkey} = 0 unless exists $context->{context_pkey}; $context->{context} = to_json($context->{context}); my $context_pkey; if ($context->{context_pkey} > 0) { $self->db->update( "context", { context => $context->{context} }, { context_pkey => $context->{context_pkey} } ); } else { try { delete %$context{context_pkey}; $context->{workflow_fkey} = $self->workflow_pkey; $context_pkey = $self->db->insert( "context", { context => $context->{context}, workflow_fkey => $context->{workflow_fkey} }, { returning => 'context_pkey' } )->hash->{context_pkey}; } catch ($e) { my $test = $e; say $e->to_string; $e = $e; } # $context->{context_pkey} = $self->db->query( # "INSERT INTO context (context, workflow_fkey) VALUES (?,?) RETURNING context_pkey", # ("$context->{context}", "$context->{workflow_fkey}") # )->hash->{context_pkey}; } return $context_pkey; } 1; #################### pod generated by Pod::Autopod - keep this line to make pod updates possible #################### =head1 NAME Daje::Workflow::Database::Model::Context =head1 SYNOPSIS use Daje::Workflow::Database::Model::Context; my $context_obj = Daje::Workflow::Database::Model::Context->new( db => $db, workflow_pkey => $workflow_pkey context_pkey => $context_pkey, context => $context, ); my $context = $context_obj->load_fk($self) my $context = $context_obj->load_pk($self) my $context_pkey = $context_obj->save($self, $context) =head1 REQUIRES Mojo::Base> DBD::Pg =head1 METHODS load_fk($self) load_pk($self) save($self, $context) =head1 AUTHOR janeskil1525 E<lt>janeskil1525@gmail.comE<gt> =head1 LICENSE Copyright (C) janeskil1525. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut