Red.git | examples/ticket/ | index.raku
use lib <lib ../../lib>;
use Red;
my $*RED-DB = database "SQLite";
model TicketStatus {
has UInt $.id is serial;
has Str $.name is column{ :unique };
}
TicketStatus.^create-table;
my \new = TicketStatus.^create: :name<new>;
my \opened = TicketStatus.^create: :name<opened>;
my \closed = TicketStatus.^create: :name<closed>;
my \blocked = TicketStatus.^create: :name<blocked>;
my \paused = TicketStatus.^create: :name<paused>;
model Ticket { ... }
model Person {
has UInt $.id is serial;
has Str $.name is column{ :!nullable };
has Ticket @.tickets is relationship( *.author-id, :model<Ticket> );
method opened-tickets { @!tickets.grep: *.status.name eq "opened" }
}
model Ticket is rw {
has UInt $.id is serial;
has Str $.title is column;
has Str $.body is column;
has UInt $.status-id is referencing( *.id, :model<TicketStatus> );
has TicketStatus $.status is relationship( *.status-id, :model<TicketStatus> ) = new;
has UInt $.author-id is referencing( *.id, :model<Person> );
has Person $.author is relationship( *.author-id, :model<Person> );
}
Ticket.^create-table;
Person.^create-table;
#my $*RED-DEBUG = True;
my \me = Person.^create: :name<Me>;
me.tickets.create: :title("new ticket 01"), :body("Creating a ticket just to be sure it works");
me.tickets.create: :title("new ticket 02"), :body("Creating another ticket just to be sure it works");
me.tickets.create: :title("new ticket 03"), :body("Creating one more ticket just to be sure it works");
me.tickets.create: :title("new ticket 04"), :body("Creating the last ticket just to be sure it works");
say "Tickets from { me.name }:";
say "{ .status.name } - { .title }" for me.tickets;
given me.tickets.pick {
say "closing ticket { .title }";
.status = closed;
.^save;
}
say "Tickets from { me.name }:";
say "{ .status.name } - { .title }" for me.tickets;