초기 커밋

This commit is contained in:
2026-03-01 07:55:59 +09:00
commit b0262d6bab
67 changed files with 4660 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
import 'package:freezed_annotation/freezed_annotation.dart';
part 'api_response.freezed.dart';
part 'api_response.g.dart';
@Freezed(genericArgumentFactories: true)
class ApiResponse<T> with _$ApiResponse<T> {
const factory ApiResponse({
required bool success,
required T data,
String? message,
@Default(200) int statusCode,
}) = _ApiResponse<T>;
factory ApiResponse.fromJson(
Map<String, dynamic> json,
T Function(Object?) fromJsonT,
) =>
_$ApiResponseFromJson(json, fromJsonT);
}

View File

@@ -0,0 +1,23 @@
import 'package:freezed_annotation/freezed_annotation.dart';
part 'pagination.freezed.dart';
part 'pagination.g.dart';
@Freezed(genericArgumentFactories: true)
class PaginatedResponse<T> with _$PaginatedResponse<T> {
const factory PaginatedResponse({
required List<T> items,
required int total,
required int page,
@JsonKey(name: 'page_size') required int pageSize,
@JsonKey(name: 'total_pages') required int totalPages,
@JsonKey(name: 'has_next') @Default(false) bool hasNext,
@JsonKey(name: 'has_prev') @Default(false) bool hasPrev,
}) = _PaginatedResponse<T>;
factory PaginatedResponse.fromJson(
Map<String, dynamic> json,
T Function(Object?) fromJsonT,
) =>
_$PaginatedResponseFromJson(json, fromJsonT);
}

View File

@@ -0,0 +1,18 @@
import 'package:json_annotation/json_annotation.dart';
@JsonEnum(valueField: 'value')
enum UserRole {
admin('admin'),
user('user');
const UserRole(this.value);
final String value;
static UserRole fromString(String value) {
return UserRole.values.firstWhere(
(role) => role.value == value,
orElse: () => UserRole.user,
);
}
}