Skip to content

問題情報がADTに上書きされないようにする#1553

Open
hotate29 wants to merge 1 commit into
kenkoooo:mainfrom
hotate29:fix-1551
Open

問題情報がADTに上書きされないようにする#1553
hotate29 wants to merge 1 commit into
kenkoooo:mainfrom
hotate29:fix-1551

Conversation

@hotate29

@hotate29 hotate29 commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

fix #1551 fix #1552

元々、クロールした問題情報をデータベースに入れる処理において、既に同じIDの問題が存在する場合は、新しい方の情報で上書きするという処理になっていました。ADTでは、URLのうち問題IDに使われる部分が出典のABCと全く同じ(例: https://atcoder.jp/contests/adt_all_20260617_2/tasks/abc396_a )なので、上書き処理が発動したのだと考えます。

// Insert into problems table
let title = problem.title();
let model = sql_entities::problems::ActiveModel {
id: Set(problem.id.clone()),
contest_id: Set(problem.contest_id.clone()),
problem_index: Set(problem.problem_index.clone()),
name: Set(problem.name.clone()),
title: Set(title),
};
sql_entities::problems::Entity::insert(model)
.on_conflict(
OnConflict::column(sql_entities::problems::Column::Id)
.update_columns([
sql_entities::problems::Column::ContestId,
sql_entities::problems::Column::ProblemIndex,
sql_entities::problems::Column::Name,
sql_entities::problems::Column::Title,
])
.to_owned(),
)
.exec(db)
.await?;

PRでは、contest_idadtで始まる問題はproblemテーブルへの挿入処理をスキップするようにして対処しています。

この変更で上書きは止まるとは思うんですが、既に上書きされた問題はそのままになるので、それについては別途対処が必要です...。丁寧に書き換えるか、一回ABCの問題データを全部吹き飛ばして再クロールするか...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

list欄でADTに既出のABCの問題がADTのものとして表示されてしまう コンテストを作成するときにADTが参照される

1 participant