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の問題データを全部吹き飛ばして再クロールするか...

Comment on lines +260 to +274
if !problem.contest_id.starts_with("adt") {
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?;
}

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

例えば将来 ADT 以外に既出コンテストが始まったときに追加の修正が必要になってしまうので、「最初に出題されたコンテストを優先する」みたいな一般的な実装にできたりします?

@kirameku26

Copy link
Copy Markdown
Contributor

https://atcoder.jp/contests/jsc2025advance-final

https://atcoder.jp/contests/abc422
みたいに、全く同じ時間で同じ問題が出る場合はどうなるのですか

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が参照される

3 participants