Four Things Plus

Denne tutorial er tænkt om et “selvstudium”, hvor du sideløbende med undervisningen på skolen, kan sidde i ro og mag og arbejde dig igennem en længere sammenhængende case.

Sørg for at kode med i IntelliJ hele vejen, og tag lidt noter undervejs. Fx. med de spørgsmål du evt. måtte have.

Nå men nu til opgaven

Vi skal bygge en huskeseddel applikation. Det er som bekendt svært at holde mere end tre ting i hovedet, så derfor skal vi bygge en lille web-applikation, som vi kalder for “fourthingsplus”.

Plan

  1. Først udarbejder vi et use-case diagram
  2. Dernæst beskrives hver use-case som en user story
  3. På baggrund af det laver vi en simpel domænemodel og på baggrund af den et ER-diagram (ERD) over databasen.
  4. Så går vi i gang med at kode. Først oprettes et Java / Maven projekt i IntelliJ (instruktioner
  5. Dernæst oprettes en database i Postgres og der lægges lidt fake data ind i tabellerne.
  6. Når alt dette er på plads begynder vi at implementere de enkelte user stories en ad gangen.
  7. Lidt efter lidt begynder vi også at style siderne, så udseende begynde at ligne de udleverede mockups.
  8. Vi vil også refaktorere koden løbende når det er mest oplagt. Dvs, at I ikke får den færdige løsning fra starten, men det er noget vi arbejder hen imod.

Her er et logo vi kan sakse

FourThingsPlusLogo

Mockups (i stedet for Figma)

Mockup

Foranalyse: usecase diagram og user stories (dokumentation)

Foranalyse

Foranalyse: datamodel (dokumentation)

Datamodel

SQL

-- Database: fourthingsplus

CREATE TABLE public.task (
    task_id integer NOT NULL,
    name character varying NOT NULL,
    done boolean DEFAULT false NOT NULL,
    user_id integer NOT NULL
);

CREATE SEQUENCE public.task_task_id_seq
    AS integer
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

CREATE TABLE public.users (
    user_id integer NOT NULL,
    user_name character varying(50) NOT NULL,
    password character varying(50)
);

CREATE SEQUENCE public.users_user_id_seq
    AS integer
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

ALTER TABLE ONLY public.task ALTER COLUMN task_id SET DEFAULT nextval('public.task_task_id_seq'::regclass);

ALTER TABLE ONLY public.users ALTER COLUMN user_id SET DEFAULT nextval('public.users_user_id_seq'::regclass);

INSERT INTO public.task VALUES (1, 'Se Jons videoer', false, 1);

INSERT INTO public.users VALUES (1, 'jon', '1234');

SELECT pg_catalog.setval('public.task_task_id_seq', 1, true);

SELECT pg_catalog.setval('public.users_user_id_seq', 1, true);

ALTER TABLE ONLY public.task
    ADD CONSTRAINT task_pkey PRIMARY KEY (task_id);

ALTER TABLE ONLY public.users
    ADD CONSTRAINT user_name_unique UNIQUE (user_name);

ALTER TABLE ONLY public.users
    ADD CONSTRAINT users_pkey PRIMARY KEY (user_id);

ALTER TABLE ONLY public.task
    ADD CONSTRAINT fk_user_task FOREIGN KEY (user_id) REFERENCES public.users(user_id) NOT VALID;

Datamappers and custom exceptions gists

State diagram: login

Login

State diagram: create user

Opret bruger

State diagram: edit and update task

Rediger task


Top

2. semester forår 2025