Commit Graph
51 Commits
Author SHA1 Message Date
REDCODE 22b15c387b feat(ui): redesigned profile cropper with movable circle, dimmed exterior, square boundary, zoom controls; added ProfileCropZoom to model; switched avatars to background-image for zoom support 2026-07-09 13:15:19 +02:00
REDCODE d3ef5ff4c1 feat(backend): add ProfileCropX/Y to Person model for profile picture cropping 2026-07-09 13:01:01 +02:00
REDCODE 7143af14f0 feat(client): add Cosplayers and CosplayerDetail pages, fix NavMenu, add modularity docs 2026-07-09 12:13:12 +02:00
REDCODE 16161ebfb8 feat(backend): add PersonMapper with ToPersonPreviewDto and ToPersonDetailedDto 2026-07-09 12:02:36 +02:00
REDCODE 4fe1fb0da2 feat: make album names clickable links in home tile hover and preview
- Add AlbumIds parallel list to AssetPreviewDto
- Populate AlbumIds in AssetsMapper
- Home tile hover: album names link to /albums/{id} with onclick:stopPropagation
- ImagePreview ChildContent: album names link to /albums/{id}
- CSS: tile-info-album and preview-info-album support <a> tags with hover underline
2026-07-08 13:48:17 +02:00
REDCODE b8f75f9529 refactor: extract ImagePreview shared component from Home and AlbumDetail
- Create ImagePreview.razor component with self-contained url generation, keyboard handling, and download
- Add Filename to AssetPreviewDto and AlbumAssetPreviewDto DTOs
- Update AssetsMapper and AlbumMapper to populate FileName
- Remove duplicate preview overlay HTML/CSS/code from Home.razor and AlbumDetail.razor
- Fix AssetDto.FileName hiding inherited member from AssetPreviewDto
2026-07-08 13:18:23 +02:00
REDCODE d602d2d34b feat: add CoverAssetId to albums with resolution data in full DTO
- Add CoverAssetId FK and CoverAsset navigation to Album model
- Add AlbumAssetPreviewDto with resolution/thumbnail info
- Extend AlbumPreviewDto/FullDto with PersonName, CoverAssetId, AssetCount
- Add CoverAssetId to AlbumCreateDto and AlbumUpdateDto
- Update AlbumMapper to populate new fields from eager-loaded relations
- Add EF migration for CoverAssetId column
2026-07-08 13:11:20 +02:00
REDCODE d4a8b272f2 feat: extend AssetPreviewDto with album and cosplayer names
- Add AlbumNames and CosplayerNames fields to AssetPreviewDto
- Include Albums and PersonOwner in AssetRepository.GetAssets() query
- Populate new fields in AssetsMapper.ToAssetPreviewDto()
2026-07-08 03:06:03 +02:00
REDCODE 2159eaec08 fix: populate LastLogin/BannedAt/UpdatedAt in UserInfoDto mapping
UsersMapper.ToGetUsersDto() was not copying LastLogin, BannedAt, or
UpdatedAt from the User entity to the UserInfoDto, causing the client
to always receive null for these fields. Added the missing mappings.

Also added null fallback ('Never') for LastLogin display on the User
page to prevent NullReferenceException when the value has not been set.
2026-07-08 02:32:12 +02:00
REDCODE 923aaa6865 feat: add CreatePersons and CreateAlbums jobs 2026-07-07 20:33:30 +02:00
REDCODE 96f431fb41 feat: add PreviewJob and upgrade thumbnails to WebP
- Add PreviewJob (WebP) — same master/sub-job pattern as ThumbnailJob
- Convert ThumbnailJob from JPEG to WebP with configurable quality
- Add ThumbnailQuality/PreviewQuality settings (configurable in settings UI)
- Add PreviewSize, ThumbnailFormat, PreviewFormat fields to Asset model
- Add format-aware repo queries for auto-regeneration of stale JPEGs
- Fix MIME types in MediaRepository/MediaController to return image/webp
- Wire PreviewJob into JobScheduler, JobMapper, JobsController
- Expose quality settings on Settings page (Jobs group, range sliders)
- Add 'Make Previews' button on Jobs page, reorder to scan/metadata/thumb/preview/phash/integrity
2026-07-07 19:41:51 +02:00
REDCODE 07fcd05031 feat: masonry gallery on homepage with infinite scroll
- Enrich AssetPreviewDto with ResolutionWidth/Height, HasThumbnail, HasPreview
- Extend GET /api/asset with ?type=&random=true for gallery queries
- Add general GetAssets repository method (type, dates, random, pagination)
- Fix LactoseAuthService.GetUserData to handle unmapped JWT claim names
- Add request-level auth debug logging middleware
- New AssetService (MilkStream.Client) for gallery API calls
- Rewrite Home.razor: CSS column-count masonry, infinite scroll via
  IntersectionObserver JS interop, inline preview overlay with
  progressive loading (preview -> thumbnail fallback), arrow/Esc nav
- Home.razor.css: responsive 2-5 column masonry, overlay styles,
  content-visibility:auto for memory optimization
- Sliding window of 10 pages (300 tiles) with loading=lazy images
- Broken thumbnail fallback to Bootstrap bi-image icon
2026-07-07 15:44:03 +02:00
REDCODE 64a0fdf81d feat(folders): add regex pattern field with named groups, syntax highlighting, and sample path preview 2026-07-07 14:19:35 +02:00
REDCODE 09883c797c feat: implement MetadataJob for image resolution extraction
- Create MetadataJob with master/sub-job pattern (mirrors PHashJob)
- Register MetadataJob in JobMapper.ToJobStatusDto()
- Implement QueueMetadataExtraction in JobScheduler with duplicate guard
- Remove NotImplementedException catch in JobsController
2026-07-06 18:55:03 +02:00
REDCODE eb9f0d14d3 docs: add XML documentation to all public APIs across all projects
Achieves 100% XML doc coverage on non-trivial types with CS1591
enforcement via Directory.Build.props.

Coverage by project:
- Butter: from 6.5% to 100% (DTOs, enums, MIME types)
- Lactose: from ~28% to 100% (controllers, services, repos, jobs, models)
- MilkStream.Client: from ~29% to 100% (all frontend services)

Uses <inheritdoc /> on repository implementations (interfaces
already documented) and full <summary>/<param>/<returns> tags
elsewhere. Enums include member-level docs.
2026-07-06 18:45:21 +02:00
REDCODE 0a9c3ba207 feat: optimize jobs API with pagination, DB persistence, and cleanup
- Split /api/jobs into three endpoints: active roots, paginated past,
  children fetched on expand — reduces response from ~1MB to ~5KB
- Persist completed jobs to PostgreSQL via JobRecord entity + migration
- Add configurable job retention cleanup (hourly timer, default 30 days)
- Fix PHashJob master not persisting (missing Complete() call)
- Add PastJobsResponse DTO to fix case-sensitive JsonElement deserialization
- Refactor JobTree/JobRow for lazy-loaded children via FetchChildren callback
- Handle 401 responses in JwtTokenRefresher with token refresh + retry
- Remove JobChildrenSummary component (replaced by inline parent summary)
2026-07-06 18:17:49 +02:00
REDCODE 0177a99449 feat: map ParentJobId in JobMapper 2026-07-06 15:15:14 +02:00
Samuele Lorefice f31369bea9 Added missing settings and power slider. Broken state 2025-09-05 04:56:53 +02:00
Samuele Lorefice bd18d8f636 Tasks now fail when they fail. 2025-09-04 20:34:03 +02:00
Samuele Lorefice a170025520 Moved to a compatible pgvector db variant, implemented Thumbnails job 2025-09-04 04:59:15 +02:00
REDCODE 28e53eb31b PHash Job implementation 2025-09-03 23:37:56 +02:00
Samuele Lorefice a4747ca417 Front end work on Jobs page 2025-09-03 20:55:57 +02:00
Samuele Lorefice b18f294db4 Scaffolded Jobs controller basics 2025-09-02 20:40:16 +02:00
Samuele Lorefice d28b53e793 feat(API): Settings rework
feat(db): extended amount of settings informations stored on the database
feat(frontend): added support for updating the refreshToken after a refresh request.
feat(backend): added a defaultSettings.json file that defines how the settings are initialized.
2025-07-18 20:40:42 +02:00
Samuele Lorefice d23f813e25 feat(db): limited strings length in Settings Table
feat(API): removed SettingsDto in favor of List<SettingDto> instead.
2025-07-17 19:34:52 +02:00
REDCODE e786c68612 feat(API): Added Access level to the data returned from authentication actions 2025-07-16 01:47:14 +02:00
Samuele Lorefice c739c17266 Reworks Settings to be a key/value pair 2025-07-08 20:15:20 +02:00
Samuele Lorefice 647c5be859 Moved DTOs to external library, referenced the library back into Lactose 2025-05-10 01:57:00 +02:00
REDCODE 33ba29c4a0 feat(API): Implemented Settings Endpoint
Closes #23
2024-11-18 23:26:10 +01:00
REDCODE 938ab6a415 chore: removed useless using declarations in TagMapper 2024-11-18 22:08:28 +01:00
REDCODE bb1dd95482 fix(API): Added missing Email field in UserInfoDto 2024-11-18 21:32:58 +01:00
REDCODE 4b2f117e3c fix(API): standardized DTO namespaces 2024-11-18 21:31:45 +01:00
REDCODE e4f2ca48e3 feat(API): Implemented FolderController and their respective Mappers/DTO/Repository interface and it's own implementation 2024-11-18 19:21:55 +01:00
REDCODE 537e642cb6 feat(API): added Resolution, mimetype and extra media data on asset table 2024-11-11 19:11:42 +01:00
REDCODE 26618d4c25 fix(API): added deleted at field in UserInfo mappers 2024-11-11 16:48:24 +01:00
REDCODE 847e93eda4 Implemented Search function on Album endpoint. Closes #5 2024-11-11 16:48:23 +01:00
REDCODE cf77a0943f Initial implementation of AlbumController Get action 2024-11-11 16:48:23 +01:00
MrFastwindandREDCODE 9bd6632264 refactor(API): Rename Asset Dtos 2024-11-11 16:48:23 +01:00
REDCODE 1b179abc50 XML Documentation Pass 2024-11-11 16:48:23 +01:00
REDCODE 0eeb84bfb3 Integrate refactoring from endpoint-impl branch 2024-11-11 16:38:32 +01:00
REDCODE 6c1299062c Cleanup of all asset related files 2024-11-11 16:38:32 +01:00
REDCODE 906cbc354f Refactoring of DTO files into separated folders for easier organization. Fixed discrepancy with one of user Dto naming. 2024-11-11 16:38:32 +01:00
REDCODE e2d358c5db Merge branch 'feature/webapi/endpoint-impl' into feature/webapi/asset-endpoint 2024-11-11 16:38:32 +01:00
MrFastwindandREDCODE 56a27720bd refactor(API): Move classes and Standardlize
Moves Dtos to their files
Adds HTTPMethod specification
Adds Bulks where missing
2024-11-11 16:38:32 +01:00
REDCODE cdfe768dfe Asset repository implementation 2024-11-11 16:38:32 +01:00
REDCODE 3355de1cd1 Moved Asset DTOs to their own subfolder 2024-11-11 16:38:32 +01:00
REDCODE 54c546aa10 Implemented single get method on AssetController 2024-11-11 16:38:32 +01:00
REDCODE 88e18636ab Added AssetsMapper and AssetRepository has been moved to it's own file 2024-11-11 16:38:32 +01:00
MrFastwindandREDCODE b1bb076906 feat(API): Adds TagController class 2024-11-11 16:38:32 +01:00
Samuele Lorefice 1e9b792141 Reformats project to Defined codestyle, adds codestyle as shared for team 2024-09-24 19:23:23 +02:00