import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:superport/data/models/vendor_dto.dart'; part 'model_dto.freezed.dart'; part 'model_dto.g.dart'; @freezed class ModelDto with _$ModelDto { const ModelDto._(); // Private constructor for getters const factory ModelDto({ int? id, required String name, @JsonKey(name: 'vendors_Id') required int vendorsId, @JsonKey(name: 'is_deleted') @Default(false) bool isDeleted, @JsonKey(name: 'registered_at') DateTime? registeredAt, @JsonKey(name: 'updated_at') DateTime? updatedAt, // Nested vendor data (optional, populated in GET requests) VendorDto? vendor, }) = _ModelDto; // isActive 계산 속성 (is_deleted의 반대) bool get isActive => !isDeleted; factory ModelDto.fromJson(Map json) => _$ModelDtoFromJson(json); } // Request DTO for creating/updating models @freezed class ModelRequestDto with _$ModelRequestDto { const factory ModelRequestDto({ required String name, @JsonKey(name: 'vendors_Id') required int vendorsId, }) = _ModelRequestDto; factory ModelRequestDto.fromJson(Map json) => _$ModelRequestDtoFromJson(json); } // Update Request DTO @freezed class ModelUpdateRequestDto with _$ModelUpdateRequestDto { const factory ModelUpdateRequestDto({ String? name, @JsonKey(name: 'vendors_Id') int? vendorsId, }) = _ModelUpdateRequestDto; factory ModelUpdateRequestDto.fromJson(Map json) => _$ModelUpdateRequestDtoFromJson(json); } // Response wrapper for paginated results @freezed class ModelListResponse with _$ModelListResponse { const factory ModelListResponse({ @JsonKey(name: 'data') required List items, @JsonKey(name: 'total') required int totalCount, @JsonKey(name: 'page') required int currentPage, @JsonKey(name: 'total_pages') required int totalPages, @JsonKey(name: 'page_size') int? pageSize, }) = _ModelListResponse; factory ModelListResponse.fromJson(Map json) => _$ModelListResponseFromJson(json); }