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.
- Her er et link til en mappe med alle videoer (de kommer dumpende i løbet af ugen)
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”.
- Her er en lille mockup lavet i Figma. Alternativt se mockups nederst på siden.
Plan
- Først udarbejder vi et use-case diagram
- Dernæst beskrives hver use-case som en user story
- På baggrund af det laver vi en simpel domænemodel og på baggrund af den et ER-diagram (ERD) over databasen.
- Så går vi i gang med at kode. Først oprettes et Java / Maven projekt i IntelliJ (instruktioner
- Dernæst oprettes en database i Postgres og der lægges lidt fake data ind i tabellerne.
- Når alt dette er på plads begynder vi at implementere de enkelte user stories en ad gangen.
- Lidt efter lidt begynder vi også at style siderne, så udseende begynde at ligne de udleverede mockups.
- 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
Mockups (i stedet for Figma)
Foranalyse: usecase diagram og user stories (dokumentation)
Foranalyse: datamodel (dokumentation)
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;