CPAN: Hab ich was übersehen?

Beitrag lesen

Datentypen.

? Ich dachte das macht man heute nicht mehr.

Natürlich macht man das. In Umgebungen wie Programmiersprachen oder Datenbanken, die Typisierung zur Verfügung stellen, wäre es töricht, sie nicht zu benutzen. Obwohl mir deine Geschäftsprozesse und -logik noch weitgehend schleierhaft sind (da musst du noch viel erklären), wage ich mich mal an ein Schema:

drop table if exists "Kurzgeschichten";  
drop table if exists "Kunden";  
drop type if exists enum_status;  
drop sequence if exists seq_kunden_id;  
drop extension if exists "uuid-ossp";  
  
create extension "uuid-ossp";  
create sequence seq_kunden_id start with 100100;  
create type enum_status as enum ('frei', 'belegt', 'gebucht');  
create table "Kunden" (  
    "Id"                bigint not null primary key default nextval('seq_kunden_id'),  
    "Beitritt"          date not null default current_date(),  
    "Firma"             text,  
    "Straße"            text not null,  
    "Hausnummer"        text not null,  
    "Ort"               text not null,  
    "PLZ"               text not null,  
    "Ansprechpartner"   text not null,  
    "Telefon"           text,  
    "Fax"               text,  
    "Email"             text not null  
);  
create table "Kurzgeschichten" (  
    "Id"        uuid not null primary key default uuid_generate_v4(),  
    "Titel"     text not null,  
    "Status"    enum_status not null default 'frei',  
    "geändert"  date not null default current_date(),  
    "Kunden_Id" bigint references "Kunden" ("Id"),  
    "Konto"     money not null default 0  
);  

Ich sag's gleich: pauschale Antworten wie "sagt mir nichts" und "für mich […] nicht mehr lesbar", mit denen du deine Ignoranz abschirmst, will ich nicht mehr hören. Bemühe dich im Sinne von SELF, dir neue Inhalte zu erschließen und gezielt Fragen zum Verständnis zu stellen, statt die mühsam aufgeschriebene Expertise zu verneinen/-geuden.

Auch Feldlängen sind doch heutzutage out!?

Ich weiß nicht, was diese Frage soll. Speicher ist endlich. Eine Obergrenze gibt's immer, wenn auch nicht explizit.

Du meinst, dass bei der Ausgabemaske das "Status-Datum-Ablauf" vom "Status-Datum" berechnet und angezeigt wird?

Ja.

Dann wär der Wert aber nicht in der Tabelle gespeichert.

Das soll so sein.

Wenn ich jetzt checken möchte, ob es schon drei Monate vor Ablauf ist, hab ich dann nicht mehr arbeit?

Mehr Arbeit macht sich nur der Artisan, der seine Werkzeuge nicht gut handhabt.

select "Id", "Titel" from "Kurzgeschichten" where "geändert" + interval '1 year' - interval '3 months' < current_date();

damit man weiss, was mit dem Datensatz ist.

use utf8;  
use DBIx::Class::Schema::Loader qw();  
DBIx::Class::Schema::Loader->loader_options(  
    naming        => {ALL => 'preserve'},  
    preserve_case => 1,  
);  
  
our $schema          = DBIx::Class::Schema::Loader->connect;  
our $kunden          = $schema->resultset('Kunden');  
our $kurzgeschichten = $schema->resultset('Kurzgeschichten');  
  
my $mustermann = $kunden->create({  
    Ansprechpartner => 'Max Mustermann',  
    Email           => 'info@musterworx.example.com',  
    Telefon         => '01234 / 123456',  
    Firma           => 'Musterworx',  
    Straße          => 'Musterstraße',  
    Hausnummer      => 1,  
    PLZ             => 12345,  
    Ort             => 'Musterstadt',  
});  
my $zahnputz_lutz = $kurzgeschichten->create({  
    Titel     => 'Der Zahnputz-Lutz',  
    Kunden_Id => $mustermann->Id,  
});  
  
my $preis = 110.00;  
$zahnputz_lutz->update({  
    Status => 'gebucht',  
    Konto  => -$preis,  
});  
$zahnputz_lutz->update({  
    Konto    => $zahnputz_lutz->Konto + $preis,  
    Status   => 'belegt', # FIXME was ist mit Teilzahlungen?  
    geändert => 'now()',  
});