Master's Thesis

Information System for Managing Coffee Consumption in an Office

Final Thesis 2.62 MB

Author of thesis: Ing. Oliver Golec

Acad. year: 2025/2026

Supervisor: Ing. Jan Pluskal, Ph.D.

Reviewer: doc. Dr. Ing. Dušan Kolář

Abstract:

BeanShare is a cross-platform system for tracking shared coffee consumption and calculating fair cost distribution among members of an office or other group drawing from a common supply. Logging a cup requires two taps on any device, and closing a billing period produces a settlement proportional to actual consumption. The system is built on .NET 10 following Clean Architecture principles, with a Blazor Server web client and a .NET MAUI Blazor Hybrid mobile client sharing a common Razor component library. Settlement uses per-product weighted average costing to preserve fairness when multiple coffee varieties are available. Persistence is handled by PostgreSQL with Entity Framework Core, and authentication uses OpenID Connect. The implementation meets all functional and non-functional requirements from the assignment and is covered by unit and integration tests.

Keywords:

coffee consumption tracking, expense sharing, Clean Architecture, .NET 10, Blazor Server, .NET MAUI, Blazor Hybrid, CQRS, domain-driven design, OpenID Connect, weighted average costing, QR code

Date of defence

24.06.2026

Result of the defence

Defended (thesis was successfully defended)

znamkaBznamka

Grading

B

Process of defence

Student nejprve prezentoval výsledky, kterých dosáhl v rámci své práce. Komise se poté seznámila s hodnocením vedoucího a posudkem oponenta práce. Student následně odpověděl na otázky přítomných. Komise se na základě posudku oponenta, hodnocení vedoucího, přednesené prezentace a odpovědí studenta na položené otázky rozhodla práci hodnotit stupněm B.

Topics for thesis defence

  1. Popište druhou skupinu uživatelů.

Language of thesis

English

Faculty

Department

Study programme

Information Technology and Artificial Intelligence (MITAI)

Specialization

Information Systems and Databases (NISD)

Composition of Committee

prof. RNDr. Alexandr Meduna, CSc. (předseda)
doc. Ing. Radek Burget, Ph.D. (místopředseda)
RNDr. Marek Rychlý, Ph.D. (člen)
Ing. Šárka Květoňová, Ph.D. (člen)
Ing. Vladimír Veselý, Ph.D. (člen)
Ing. Jiří Hynek, Ph.D. (člen)

Supervisor’s report
Ing. Jan Pluskal, Ph.D.

Student odvedl vynikající inženýrskou práci s jasným přesahem do reálné praxe. Velmi kladně hodnotím důsledné uplatnění principů Clean Architecture napříč 15 projekty s jasně odděleným doménovým jádrem nezávislým na infrastruktuře, použití CQRS s deklarativní autorizační pipeline, návrhový vzor Strategy pro výměnnou politiku vyúčtování (ICostingPolicy) i kvalitu testovací sady, kde 81 integračních testů běží proti reálné instanci PostgreSQL přes knihovnu Testcontainers, nikoli proti in-memory poskytovateli.


Oceňuji zejména, že student nad rámec zadání dodal mobilního klienta v .NET MAUI s Blazor Hybrid sdílejícího Razor komponenty s webem, multi-currency konverzi přes Open Exchange Rates, hromadný CSV import historických nákupů, generování PDF a Excel sestav a propracovanou implementaci QR kódů s logo overlay a server-side resolution s in-memory cache, která zachovává možnost přečíslování fyzických QR kódů bez nutnosti je znovu tisknout.


Performance evaluation s konkrétními měřeními odezev (medián 70 až 180 ms) a doloženým zlepšením o cca 60 procent díky composite endpointu ve stylu BFF dodává práci empirický rozměr, který u diplomových prací aplikačního charakteru často chybí. Naopak bych uvítal formalizovanější metodiku usability evaluace, například SUS dotazník nebo task-based testování s časovými metrikami namísto převážně kvalitativní zpětné vazby od týmu a pěti nezávislých testerů. Některé empiricky volené hyperparametry (toleranční pásmo 5 minut u časových razítek, kapacita 200 položek u resolve cache, TTL hodnoty 15 až 60 s) by si zasloužily krátkou citlivostní diskuzi. Tyto drobné stínky však nic nemění na tom, že výsledné dílo je plně funkční, produkčně nasazené, otevřeně publikované a postavené na zdravém architektonickém základě, který bude snadno udržovatelný a rozšiřitelný.


Diplomovou práci Olivera Golce hodnotím jako vynikající a navrhuji ji hodnotit stupněm A jako výbornou.

Evaluation criteria Verbal classification
Informace k zadání

Téma bylo vypsáno na můj popud s cílem získat plnohodnotný nástroj pro spravedlivé rozúčtování spotřeby kávy v rámci výzkumné skupiny NES@FIT, kde se dosavadní tabulkové řešení dlouhodobě ukázalo jako neudržitelné. Zadání předepisuje cílovou platformu .NET 10 s frameworkem Blazor a databází PostgreSQL, vyžaduje uplatnění principů Clean Architecture, autentizaci přes OpenID Connect a volitelně rozšíření o QR/NFC vstup. Práce zahrnuje plný technologický záběr od doménového návrhu (DDD agregáty Space, CoffeeStock, BillingPeriod, Settlement) přes CQRS pipeline s MediatR až po dvě plně funkční prezentační vrstvy, konkrétně Blazor Server pro web a .NET MAUI s Blazor Hybrid pro mobilního klienta, které sdílejí společnou Razor knihovnu komponent. Vzhledem k šíři technologického záběru, požadované produkční kvalitě reálného nasazení a netriviální doménové logice vyúčtování (vážený průměr nákladů zvlášť pro každý druh kávy, ošetření členů přistupujících v průběhu zúčtovacího období) považuji zadání za obtížnější. S dosaženými výsledky jsem velmi spokojen, student předčil moje očekávání jak v rozsahu dodané funkcionality, tak v kvalitě technické realizace.

Aktivita při dokončování

Práce byla dokončena s předstihem a finální podoba textu byla několikrát konzultována. Student si ponechal dostatek času na závěrečné ladění, doplnění integračních testů, optimalizaci odezev a typografické vyladění technické zprávy. Připravenost k odevzdání byla vzorná.

Publikační činnost, ocenění

Zdrojové kódy jsou zveřejněny jako open source na GitHubu. Vlastní systém BeanShare je provozně nasazen a v reálném používání v rámci výzkumné skupiny NES@FIT, kde nahradil dosavadní řešení založené na sdílených tabulkách, a slouží jako primární nástroj pro evidenci sdílené spotřeby kávy.

Práce s literaturou

Student samostatně nalezl 32 referenčních zdrojů, mezi nimi klíčové knižní publikace (Martin, Evans, Fowler, Vernon, Johnson) i normativní dokumenty (RFC 6749 a RFC 7636 k OAuth/PKCE, ISO 4217, ISO/IEC 18004 pro QR kódy). Vzhledem k povaze práce, která stojí na rychle se vyvíjejících technologiích .NET 10, Blazor, MAUI a OpenID Connect, je převaha online zdrojů přirozená a relevantní. Citace v textu jsou důsledně používány a citační etika je v pořádku.

Aktivita během řešení, konzultace, komunikace

Student konzultoval pravidelně po celou dobu řešení a na konzultace byl vždy velmi dobře připraven. Diskuze byly věcné a konstruktivní, student aktivně přicházel s vlastními návrhy řešení a předem promyšlenými otázkami. Připomínky a doporučení k návrhu i implementaci pravidelně zapracovával do další iterace, což je z mého pohledu klíčový důvod, proč se podařilo dospět k produkčně použitelnému výsledku v rámci jednoho akademického roku.

Points proposed by supervisor: 95

Grade proposed by supervisor: A

Reviewer’s report
doc. Dr. Ing. Dušan Kolář

Podle mě měla být práce více soustředěna na porovnání, než na budování vlastní aplikace, která nabyla na objemu jen díky různým rozšířením, nebo implementací kódu, který je v knihovnách. Jelikož z různých úhlů pohledu ji vidím jako stěží dostatečnou až výbornou, hodnotím uprostřed C/75.

Evaluation criteria Verbal classification Points
Rozsah splnění požadavků zadání

Evaluation level: zadání téměř splněno

Zadání je splněno, neboť sice bych si představoval větší a hlubší srovnání architektury Clean s dalšími, ale zase student přidal drobná rozšíření.

Rozsah technické zprávy

Evaluation level: je v obvyklém rozmezí

Prezentační úroveň technické zprávy

Text je podle mě těžko čitelný, proložený třeba kusy kódu, diagramy, které až tak důležité nejsou (ne všechny), takže mohly být v přílohách. Dále obrázky, které nejsou přesné (např. 3.1. má mít cibulovitou strukturu, ne přesahovat, jak mi sám autor sdělil). Chybí mi hlubší srovnání s více architekturami. Některé zkratky nejsou vysvětleny ani v textu ani ve slovníčku. Úvody do kapitol považuji za zbytečnou vatu.

65
Formální úprava technické zprávy

Velmi pěkná.

95
Práce s literaturou

Pro danou tématiku asi vhodná, i když chybějí ty další architektury.

75
Realizační výstup

Jedná se o plně funkční aplikaci s řadou rozhraní a funkcí. Student sám, jak mi sdělil při předvedení, implementoval věci, které jsou jinak v knihovnách, např. SMTP klient. Došlo i na drobná rozšíření.

95
Využitelnost výsledků

Aplikace nepřináší nová poznání, slouží jako demonstrace architektury Clean. Její využití v rámci nějaké komunity na pracovišti není vyloučeno.

Náročnost zadání

Evaluation level: průměrně obtížné zadání

Zadání se jeví jako velmi jednoduché a samotná aplikace by taky mohla být jednoduše navržena a vyvinuta. Celé to ale spočívá na tom, že je třeba aplikaci založit na architektuře Clean. A tu nějakým způsobem prozkoumat a zhodnotit. Tím se spolu s dalšími požadavky dostaneme na standardní zadání.

Points proposed by reviewer: 75

Grade proposed by reviewer: C

Responsibility: Mgr. et Mgr. Hana Odstrčilová