Skip to content

Commit c7d9c89

Browse files
authored
fix: allow closing draft CLs and fix draft list ordering (#1982)
* fix: allow closing draft CLs and fix draft list ordering - Allow /api/v1/cl/{link}/close to close both Open and Draft change lists so draft CLs can be closed from the UI - Remove default ORDER BY id ASC in CL list query and respect created_at/updated_at sorting - Ensure newly created draft CLs appear on the first page when sorted by latest creation time Signed-off-by: Hongze Gao <15101764808@163.com> * fix: make CL list fallback sort deterministic - Ensure CL list falls back to ORDER BY id DESC when no valid sort field is provided - Treat unknown sort_by values the same as missing ones to keep pagination stable - Preserve created_at/updated_at based ordering when a recognized sort field is passed Signed-off-by: Hongze Gao <15101764808@163.com> * fix: format cl_storage.rs with cargo fmt Signed-off-by: Hongze Gao <15101764808@163.com> --------- Signed-off-by: Hongze Gao <15101764808@163.com>
1 parent 78e5d03 commit c7d9c89

2 files changed

Lines changed: 10 additions & 4 deletions

File tree

jupiter/src/storage/cl_storage.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,20 @@ impl ClStorage {
100100
q.filter(mega_cl::Column::Username.eq(author))
101101
})
102102
.filter(cond)
103-
.distinct()
104-
.order_by_asc(mega_cl::Column::Id);
103+
.distinct();
105104

106105
let mut sort_map = HashMap::new();
107106
sort_map.insert("created_at", mega_cl::Column::CreatedAt);
108107
sort_map.insert("updated_at", mega_cl::Column::UpdatedAt);
109108

110-
let sorted_query = apply_sort(base_query, params.sort_by.as_deref(), params.asc, &sort_map);
109+
let sort_field = params.sort_by.as_deref();
110+
let has_valid_sort = sort_field.and_then(|field| sort_map.get(field)).is_some();
111+
112+
let mut sorted_query = apply_sort(base_query, sort_field, params.asc, &sort_map);
113+
114+
if !has_valid_sort {
115+
sorted_query = sorted_query.order_by_desc(mega_cl::Column::Id);
116+
}
111117

112118
let paginator = sorted_query.paginate(self.get_connection(), page.per_page);
113119
let total = paginator.num_items().await?;

mono/src/api/router/cl_router.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ async fn close_cl(
108108
let res = state.cl_stg().get_cl(&link).await?;
109109
let model = res.ok_or(MegaError::Other("Not Found".to_string()))?;
110110

111-
if model.status == MergeStatusEnum::Open {
111+
if matches!(model.status, MergeStatusEnum::Open | MergeStatusEnum::Draft) {
112112
let link = model.link.clone();
113113
state.cl_stg().close_cl(model).await?;
114114
state

0 commit comments

Comments
 (0)