refactor: drop dead code left after the worktree move

ChipGroup is orphaned since the explore rewrite dropped the filter chips.
Mix.GeneratedOn was written on every generation and never read, and it
duplicated CreatedAt, which IAuditable already sets at the same moment.
This commit is contained in:
2026-07-21 18:22:50 +02:00
parent 584109bf05
commit cbeb52fc05
8 changed files with 1205 additions and 70 deletions
@@ -304,8 +304,6 @@ namespace Musify.Application.Mixes
database.Mixes.RemoveRange(previousMixes); database.Mixes.RemoveRange(previousMixes);
} }
var today = DateOnly.FromDateTime(DateTime.UtcNow);
for (var position = 0; position < drafts.Count; position++) for (var position = 0; position < drafts.Count; position++)
{ {
var draft = drafts[position]; var draft = drafts[position];
@@ -314,7 +312,6 @@ namespace Musify.Application.Mixes
UserId = userId, UserId = userId,
Title = draft.Title, Title = draft.Title,
Subtitle = draft.Subtitle, Subtitle = draft.Subtitle,
GeneratedOn = today,
Position = position Position = position
}; };
@@ -6,7 +6,6 @@ namespace Musify.Application.Mixes.Responses
Guid Id, Guid Id,
string Title, string Title,
string? Subtitle, string? Subtitle,
DateOnly GeneratedOn,
int ItemCount, int ItemCount,
IReadOnlyList<MixItemApplicationResponse> Items) IReadOnlyList<MixItemApplicationResponse> Items)
{ {
@@ -20,7 +19,6 @@ namespace Musify.Application.Mixes.Responses
mix.Id, mix.Id,
mix.Title, mix.Title,
mix.Subtitle, mix.Subtitle,
mix.GeneratedOn,
itemCount, itemCount,
[.. items.Select(MixItemApplicationResponse.FromEntity)]); [.. items.Select(MixItemApplicationResponse.FromEntity)]);
} }
-3
View File
@@ -22,9 +22,6 @@ namespace Musify.Domain.Entities
[MaxLength(256)] [MaxLength(256)]
public string? Subtitle { get; set; } public string? Subtitle { get; set; }
[Required]
public required DateOnly GeneratedOn { get; set; }
[Required] [Required]
public int Position { get; set; } = 0; public int Position { get; set; } = 0;
@@ -0,0 +1,30 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Musify.Infrastructure.Persistence.Migrations
{
/// <inheritdoc />
public partial class DropMixGeneratedOn : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "GeneratedOn",
table: "Mixes");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<DateOnly>(
name: "GeneratedOn",
table: "Mixes",
type: "date",
nullable: false,
defaultValue: new DateOnly(1, 1, 1));
}
}
}
@@ -325,9 +325,6 @@ namespace Musify.Infrastructure.Persistence.Migrations
b.Property<DateTime>("CreatedAt") b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone"); .HasColumnType("timestamp with time zone");
b.Property<DateOnly>("GeneratedOn")
.HasColumnType("date");
b.Property<int>("Position") b.Property<int>("Position")
.HasColumnType("integer"); .HasColumnType("integer");
-2
View File
@@ -608,8 +608,6 @@ export interface components {
id: string; id: string;
title: string; title: string;
subtitle: null | string; subtitle: null | string;
/** Format: date */
generatedOn: string;
/** Format: int32 */ /** Format: int32 */
itemCount: number | string; itemCount: number | string;
items: components["schemas"]["MixItemApplicationResponse"][]; items: components["schemas"]["MixItemApplicationResponse"][];
@@ -1,57 +0,0 @@
<script lang="ts" module>
import type { LucideIcon } from '@lucide/svelte';
export interface ChipOption {
value: string;
label: string;
icon?: LucideIcon;
disabled?: boolean;
hint?: string;
}
</script>
<script lang="ts">
import Check from '@lucide/svelte/icons/check';
interface Props {
options: ChipOption[];
selected: string[];
label: string;
onChange: (selected: string[]) => void;
class?: string;
}
let { options, selected, label, onChange, class: klass = '' }: Props = $props();
function toggle(value: string) {
onChange(selected.includes(value) ? selected.filter((v) => v !== value) : [...selected, value]);
}
</script>
<div role="group" aria-label={label} class="flex flex-wrap items-center gap-2 {klass}">
{#each options as option (option.value)}
{@const active = selected.includes(option.value)}
<label
title={option.hint}
class="inline-flex cursor-pointer items-center gap-1.5 rounded-full border px-3.5 py-1.5 text-sm font-semibold transition select-none
{active
? 'border-transparent bg-accent text-on-accent'
: 'border-line bg-surface text-fg-2 hover:bg-surface-hover'}
{option.disabled ? 'pointer-events-none opacity-45' : ''}"
>
<input
type="checkbox"
class="sr-only"
checked={active}
disabled={option.disabled}
onchange={() => toggle(option.value)}
/>
{#if active}
<Check class="h-3.5 w-3.5" strokeWidth={3} />
{:else if option.icon}
<option.icon class="h-3.5 w-3.5" strokeWidth={2} />
{/if}
{option.label}
</label>
{/each}
</div>