From b9903c1a283723855e118a1ec67f1f9c8f434e4c Mon Sep 17 00:00:00 2001 From: fulleni Date: Tue, 2 Dec 2025 07:11:36 +0100 Subject: [PATCH 1/6] refactor: remove unused CommentStatus and ReportStatus enums - Removed CommentStatus enum from comment_status.dart - Removed ReportStatus enum from report_status.dart - Deleted corresponding tests for both enums --- lib/src/enums/comment_status.dart | 27 ----------------- lib/src/enums/report_status.dart | 19 ------------ test/src/enums/comment_status_test.dart | 40 ------------------------- test/src/enums/report_status_test.dart | 29 ------------------ 4 files changed, 115 deletions(-) delete mode 100644 lib/src/enums/comment_status.dart delete mode 100644 lib/src/enums/report_status.dart delete mode 100644 test/src/enums/comment_status_test.dart delete mode 100644 test/src/enums/report_status_test.dart diff --git a/lib/src/enums/comment_status.dart b/lib/src/enums/comment_status.dart deleted file mode 100644 index 95fb5a5f..00000000 --- a/lib/src/enums/comment_status.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; - -/// {@template comment_status} -/// Defines the lifecycle status of a user-submitted comment. -/// {@endtemplate} -@JsonEnum() -enum CommentStatus { - /// The comment has been submitted and is awaiting moderation. - @JsonValue('pendingReview') - pendingReview, - - /// The comment has been approved by a moderator and is publicly visible. - @JsonValue('approved') - approved, - - /// The comment has been rejected by a moderator and is not visible. - @JsonValue('rejected') - rejected, - - /// The comment has been automatically flagged by an AI moderation service. - @JsonValue('flaggedByAI') - flaggedByAI, - - /// The comment has been hidden by the user who posted it. - @JsonValue('hiddenByUser') - hiddenByUser, -} diff --git a/lib/src/enums/report_status.dart b/lib/src/enums/report_status.dart deleted file mode 100644 index 6e0bd3bf..00000000 --- a/lib/src/enums/report_status.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; - -/// {@template report_status} -/// Defines the moderation workflow status for a user-submitted report. -/// {@endtemplate} -@JsonEnum() -enum ReportStatus { - /// The report has been submitted by a user and is awaiting review. - @JsonValue('submitted') - submitted, - - /// A moderator is actively reviewing the report. - @JsonValue('inReview') - inReview, - - /// The report has been reviewed and a decision has been made. - @JsonValue('resolved') - resolved, -} diff --git a/test/src/enums/comment_status_test.dart b/test/src/enums/comment_status_test.dart deleted file mode 100644 index e1a711fa..00000000 --- a/test/src/enums/comment_status_test.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:core/src/enums/comment_status.dart'; -import 'package:test/test.dart'; - -void main() { - group('CommentStatus', () { - test('has correct values', () { - expect( - CommentStatus.values, - containsAll([ - CommentStatus.pendingReview, - CommentStatus.approved, - CommentStatus.rejected, - CommentStatus.flaggedByAI, - CommentStatus.hiddenByUser, - ]), - ); - }); - - test('has correct string values', () { - expect(CommentStatus.pendingReview.name, 'pendingReview'); - expect(CommentStatus.approved.name, 'approved'); - expect(CommentStatus.rejected.name, 'rejected'); - expect(CommentStatus.flaggedByAI.name, 'flaggedByAI'); - expect(CommentStatus.hiddenByUser.name, 'hiddenByUser'); - }); - - test('can be created from string values', () { - expect( - CommentStatus.values.byName('pendingReview'), - CommentStatus.pendingReview, - ); - expect(CommentStatus.values.byName('approved'), CommentStatus.approved); - expect(CommentStatus.values.byName('rejected'), CommentStatus.rejected); - expect( - CommentStatus.values.byName('flaggedByAI'), - CommentStatus.flaggedByAI, - ); - }); - }); -} diff --git a/test/src/enums/report_status_test.dart b/test/src/enums/report_status_test.dart deleted file mode 100644 index 9be135f5..00000000 --- a/test/src/enums/report_status_test.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:core/src/enums/report_status.dart'; -import 'package:test/test.dart'; - -void main() { - group('ReportStatus', () { - test('has correct values', () { - expect( - ReportStatus.values, - containsAll([ - ReportStatus.submitted, - ReportStatus.inReview, - ReportStatus.resolved, - ]), - ); - }); - - test('has correct string values', () { - expect(ReportStatus.submitted.name, 'submitted'); - expect(ReportStatus.inReview.name, 'inReview'); - expect(ReportStatus.resolved.name, 'resolved'); - }); - - test('can be created from string values', () { - expect(ReportStatus.values.byName('submitted'), ReportStatus.submitted); - expect(ReportStatus.values.byName('inReview'), ReportStatus.inReview); - expect(ReportStatus.values.byName('resolved'), ReportStatus.resolved); - }); - }); -} From 84bb2b0246a3105e61b69cbcf00ed5caa85582e4 Mon Sep 17 00:00:00 2001 From: fulleni Date: Tue, 2 Dec 2025 07:11:55 +0100 Subject: [PATCH 2/6] feat(enums): add ModerationStatus enum and remove unused enums - Add new ModerationStatus enum to replace CommentStatus and ReportStatus - Remove unused CommentStatus and ReportStatus enums - Update related tests for the new enum --- lib/src/enums/enums.dart | 3 +- lib/src/enums/moderation_status.dart | 16 +++++++++++ test/src/enums/moderation_status_test.dart | 32 ++++++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 lib/src/enums/moderation_status.dart create mode 100644 test/src/enums/moderation_status_test.dart diff --git a/lib/src/enums/enums.dart b/lib/src/enums/enums.dart index 6517c2b4..e3cb9ec6 100644 --- a/lib/src/enums/enums.dart +++ b/lib/src/enums/enums.dart @@ -8,7 +8,6 @@ export 'app_text_scale_factor.dart'; export 'app_user_role.dart'; export 'banner_ad_shape.dart'; export 'comment_report_reason.dart'; -export 'comment_status.dart'; export 'content_status.dart'; export 'content_type.dart'; export 'dashboard_user_role.dart'; @@ -21,10 +20,10 @@ export 'feed_item_click_behavior.dart'; export 'feed_item_density.dart'; export 'feed_item_image_style.dart'; export 'headline_report_reason.dart'; +export 'moderation_status.dart'; export 'push_notification_provider.dart'; export 'push_notification_subscription_delivery_type.dart'; export 'reaction_type.dart'; -export 'report_status.dart'; export 'reportable_entity.dart'; export 'sort_order.dart'; export 'source_report_reason.dart'; diff --git a/lib/src/enums/moderation_status.dart b/lib/src/enums/moderation_status.dart new file mode 100644 index 00000000..ece04c8d --- /dev/null +++ b/lib/src/enums/moderation_status.dart @@ -0,0 +1,16 @@ +import 'package:json_annotation/json_annotation.dart'; + +/// {@template moderation_status} +/// Defines the moderation status of a user-submitted content, such as a +/// comment or a report. +/// {@endtemplate} +@JsonEnum() +enum ModerationStatus { + /// The item has been submitted and is awaiting moderation. + @JsonValue('pendingReview') + pendingReview, + + /// The item has been reviewed and a decision has been made. + @JsonValue('resolved') + resolved, +} diff --git a/test/src/enums/moderation_status_test.dart b/test/src/enums/moderation_status_test.dart new file mode 100644 index 00000000..a8829955 --- /dev/null +++ b/test/src/enums/moderation_status_test.dart @@ -0,0 +1,32 @@ +import 'package:core/src/enums/moderation_status.dart'; +import 'package:test/test.dart'; + +void main() { + group('ModerationStatus', () { + test('has correct values', () { + expect( + ModerationStatus.values, + containsAll([ + ModerationStatus.pendingReview, + ModerationStatus.resolved, + ]), + ); + }); + + test('has correct string values', () { + expect(ModerationStatus.pendingReview.name, 'pendingReview'); + expect(ModerationStatus.resolved.name, 'resolved'); + }); + + test('can be created from string values', () { + expect( + ModerationStatus.values.byName('pendingReview'), + ModerationStatus.pendingReview, + ); + expect( + ModerationStatus.values.byName('resolved'), + ModerationStatus.resolved, + ); + }); + }); +} From 198286bd78317c78b90a1e21b29a9574b2539fdd Mon Sep 17 00:00:00 2001 From: fulleni Date: Tue, 2 Dec 2025 07:12:57 +0100 Subject: [PATCH 3/6] refactor(ugc): replace CommentStatus and ReportStatus with ModerationStatus - Consolidate moderation status enums into a single ModerationStatus enum - Update Comment and Report models to use the new ModerationStatus enum - This change simplifies the moderation status handling across different UGC types --- lib/src/models/user_generated_content/comment.dart | 6 +++--- lib/src/models/user_generated_content/report.dart | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/src/models/user_generated_content/comment.dart b/lib/src/models/user_generated_content/comment.dart index 4769ae5b..426ed311 100644 --- a/lib/src/models/user_generated_content/comment.dart +++ b/lib/src/models/user_generated_content/comment.dart @@ -15,7 +15,7 @@ class Comment extends Equatable { const Comment({ required this.language, required this.content, - this.status = CommentStatus.pendingReview, + this.status = ModerationStatus.pendingReview, }); /// Creates a [Comment] from JSON data. @@ -29,7 +29,7 @@ class Comment extends Equatable { final String content; /// The current moderation status of the comment. - final CommentStatus status; + final ModerationStatus status; /// Converts this [Comment] instance to JSON data. Map toJson() => _$CommentToJson(this); @@ -41,7 +41,7 @@ class Comment extends Equatable { Comment copyWith({ String? content, Language? language, - CommentStatus? status, + ModerationStatus? status, }) { return Comment( language: language ?? this.language, diff --git a/lib/src/models/user_generated_content/report.dart b/lib/src/models/user_generated_content/report.dart index 9bb70ba6..048f1c32 100644 --- a/lib/src/models/user_generated_content/report.dart +++ b/lib/src/models/user_generated_content/report.dart @@ -1,6 +1,6 @@ import 'package:core/src/enums/comment_report_reason.dart'; import 'package:core/src/enums/headline_report_reason.dart'; -import 'package:core/src/enums/report_status.dart'; +import 'package:core/src/enums/moderation_status.dart'; import 'package:core/src/enums/reportable_entity.dart'; import 'package:core/src/enums/source_report_reason.dart'; import 'package:core/src/utils/json_helpers.dart'; @@ -64,7 +64,7 @@ class Report extends Equatable { final String reason; /// The current moderation status of the report. - final ReportStatus status; + final ModerationStatus status; /// Optional additional comments from the user providing more context. final String? additionalComments; @@ -96,7 +96,7 @@ class Report extends Equatable { ReportableEntity? entityType, String? entityId, String? reason, - ReportStatus? status, + ModerationStatus? status, ValueWrapper? additionalComments, DateTime? createdAt, }) { From 5961860ea90d60539f71d9217f9bec86f28878d7 Mon Sep 17 00:00:00 2001 From: fulleni Date: Tue, 2 Dec 2025 07:13:17 +0100 Subject: [PATCH 4/6] build(serialization): sync --- .../models/user_generated_content/comment.g.dart | 15 ++++++--------- .../models/user_generated_content/report.g.dart | 11 +++++------ 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/lib/src/models/user_generated_content/comment.g.dart b/lib/src/models/user_generated_content/comment.g.dart index c8492fea..894c9559 100644 --- a/lib/src/models/user_generated_content/comment.g.dart +++ b/lib/src/models/user_generated_content/comment.g.dart @@ -17,8 +17,8 @@ Comment _$CommentFromJson(Map json) => status: $checkedConvert( 'status', (v) => - $enumDecodeNullable(_$CommentStatusEnumMap, v) ?? - CommentStatus.pendingReview, + $enumDecodeNullable(_$ModerationStatusEnumMap, v) ?? + ModerationStatus.pendingReview, ), ); return val; @@ -27,13 +27,10 @@ Comment _$CommentFromJson(Map json) => Map _$CommentToJson(Comment instance) => { 'language': instance.language.toJson(), 'content': instance.content, - 'status': _$CommentStatusEnumMap[instance.status]!, + 'status': _$ModerationStatusEnumMap[instance.status]!, }; -const _$CommentStatusEnumMap = { - CommentStatus.pendingReview: 'pendingReview', - CommentStatus.approved: 'approved', - CommentStatus.rejected: 'rejected', - CommentStatus.flaggedByAI: 'flaggedByAI', - CommentStatus.hiddenByUser: 'hiddenByUser', +const _$ModerationStatusEnumMap = { + ModerationStatus.pendingReview: 'pendingReview', + ModerationStatus.resolved: 'resolved', }; diff --git a/lib/src/models/user_generated_content/report.g.dart b/lib/src/models/user_generated_content/report.g.dart index 84a93a58..e3daac72 100644 --- a/lib/src/models/user_generated_content/report.g.dart +++ b/lib/src/models/user_generated_content/report.g.dart @@ -19,7 +19,7 @@ Report _$ReportFromJson(Map json) => reason: $checkedConvert('reason', (v) => v as String), status: $checkedConvert( 'status', - (v) => $enumDecode(_$ReportStatusEnumMap, v), + (v) => $enumDecode(_$ModerationStatusEnumMap, v), ), createdAt: $checkedConvert( 'createdAt', @@ -39,7 +39,7 @@ Map _$ReportToJson(Report instance) => { 'entityType': _$ReportableEntityEnumMap[instance.entityType]!, 'entityId': instance.entityId, 'reason': instance.reason, - 'status': _$ReportStatusEnumMap[instance.status]!, + 'status': _$ModerationStatusEnumMap[instance.status]!, 'additionalComments': instance.additionalComments, 'createdAt': dateTimeToJson(instance.createdAt), }; @@ -50,8 +50,7 @@ const _$ReportableEntityEnumMap = { ReportableEntity.engagement: 'engagement', }; -const _$ReportStatusEnumMap = { - ReportStatus.submitted: 'submitted', - ReportStatus.inReview: 'inReview', - ReportStatus.resolved: 'resolved', +const _$ModerationStatusEnumMap = { + ModerationStatus.pendingReview: 'pendingReview', + ModerationStatus.resolved: 'resolved', }; From 5a701d4a50633f51009b671124eba79949d6a161 Mon Sep 17 00:00:00 2001 From: fulleni Date: Tue, 2 Dec 2025 07:14:06 +0100 Subject: [PATCH 5/6] fix(test): update Comment and Report status usage - Replace CommentStatus with ModerationStatus in comment_test.dart - Update ReportStatus to ModerationStatus in report_test.dart --- test/src/models/user_generated_content/comment_test.dart | 2 +- test/src/models/user_generated_content/report_test.dart | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/src/models/user_generated_content/comment_test.dart b/test/src/models/user_generated_content/comment_test.dart index 0ffd57bf..06929b35 100644 --- a/test/src/models/user_generated_content/comment_test.dart +++ b/test/src/models/user_generated_content/comment_test.dart @@ -27,7 +27,7 @@ void main() { group('copyWith', () { test('returns a new instance with updated fields', () { const newContent = 'This is updated content.'; - const newStatus = CommentStatus.rejected; + const newStatus = ModerationStatus.resolved; final updatedComment = commentFixture.copyWith( content: newContent, diff --git a/test/src/models/user_generated_content/report_test.dart b/test/src/models/user_generated_content/report_test.dart index 4141f1c8..42c0c6b9 100644 --- a/test/src/models/user_generated_content/report_test.dart +++ b/test/src/models/user_generated_content/report_test.dart @@ -24,9 +24,9 @@ void main() { group('copyWith', () { test('returns a new instance with updated values', () { final updatedReport = reportFixture.copyWith( - status: ReportStatus.resolved, + status: ModerationStatus.resolved, ); - expect(updatedReport.status, ReportStatus.resolved); + expect(updatedReport.status, ModerationStatus.resolved); expect(updatedReport, isNot(equals(reportFixture))); }); From ce4211cc303983af91b49741bf2d4f334fffb797 Mon Sep 17 00:00:00 2001 From: fulleni Date: Tue, 2 Dec 2025 07:14:52 +0100 Subject: [PATCH 6/6] refactor(fixtures): update status values and resolve issues - Change CommentStatus to ModerationStatus in headline_comments.dart - Change ReportStatus to ModerationStatus in reports.dart - Fix varying status values for realism in both files - Address headline entity ID assignment in reports.dart --- lib/src/fixtures/headline_comments.dart | 8 +++----- lib/src/fixtures/reports.dart | 12 +++++------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/lib/src/fixtures/headline_comments.dart b/lib/src/fixtures/headline_comments.dart index 939c1aae..ffa4c450 100644 --- a/lib/src/fixtures/headline_comments.dart +++ b/lib/src/fixtures/headline_comments.dart @@ -54,12 +54,10 @@ List getHeadlineCommentsFixturesData({ for (var j = 0; j < 10; j++) { final commentIndex = i * 10 + j; - // Vary the status for realism - var status = CommentStatus.approved; + // Vary the status for realism. Default to resolved. + var status = ModerationStatus.resolved; if (commentIndex % 15 == 0) { - status = CommentStatus.pendingReview; - } else if (commentIndex % 25 == 0) { - status = CommentStatus.rejected; + status = ModerationStatus.pendingReview; } comments.add( diff --git a/lib/src/fixtures/reports.dart b/lib/src/fixtures/reports.dart index 656f3217..ea467ac0 100644 --- a/lib/src/fixtures/reports.dart +++ b/lib/src/fixtures/reports.dart @@ -35,12 +35,10 @@ List getReportsFixturesData({DateTime? now}) { for (var i = 0; i < users.length; i++) { final user = users[i]; - final headline = headlines[i]; - var status = ReportStatus.submitted; - if (i % 3 == 0) { - status = ReportStatus.inReview; - } else if (i % 5 == 0) { - status = ReportStatus.resolved; + var status = ModerationStatus.pendingReview; + // Every 4th report is resolved + if (i > 0 && i % 4 == 0) { + status = ModerationStatus.resolved; } // Create a mix of report types @@ -51,7 +49,7 @@ List getReportsFixturesData({DateTime? now}) { id: reportIds[i], reporterUserId: user.id, entityType: ReportableEntity.headline, - entityId: headline.id, + entityId: headlines[i].id, reason: headlineReasons[i % headlineReasons.length].name, additionalComments: 'This headline seems misleading.', status: status,