Add optimistic concurrency (RowVersion) to user-editable entities
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 48/100
Línea de trabajo
Comienza con LearnStack.Core/Data/Models/LearningResource.cs y LearnStack.Core/Services/LearningResourceService.cs:105-130; después, sigue la ruta de reordenación masiva del servicio en las líneas 157-176. Identifica el modelo ContentIdea correspondiente y su servicio, y verifica cómo DbUpdateConcurrencyException puede llegar al flujo visible para el usuario. Se considera terminado cuando las ediciones concurrentes muestran un mensaje de conflicto y la reordenación obsoleta del lado del cliente ya no descarta cambios silenciosamente.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Tier 2 — correctness
Problem
No entity carries a concurrency token, and the update services copy every field from the incoming object onto the tracked entity. Two browser tabs — very common in a Blazor Server app, and the resource list is also edited from dialogs — silently overwrite each other, last write wins. Drag-and-drop reordering makes this worse because it rewrites CustomOrder across many rows at once.
Evidence
LearnStack.Core/Data/Models/LearningResource.cs— noRowVersionLearnStack.Core/Services/LearningResourceService.cs:105-130— wholesale field copyLearnStack.Core/Services/LearningResourceService.cs:157-176— bulkCustomOrderrewrite
Proposed fix
- Add
[Timestamp] public byte[]? RowVersion { get; set; }toLearningResourceandContentIdea. - Handle
DbUpdateConcurrencyExceptionin the services and surface a "this item changed elsewhere" message instead of silently overwriting.
Acceptance criteria
- Concurrent edits produce a conflict message rather than silent data loss
- Reordering is resilient to a stale client-side list
- Lenguaje dominante
- HTML
- Estrellas
- 10
- Forks
- 0
- Merge medio
- 2 h 35 min
- PR fusionados (30 d)
- 21
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de kasuken/LearnStack
-
enhancement
Dificultad 1/5 Menos de una hora Aptitud para principiantes 91/100
kasuken/LearnStack#59 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
kasuken/LearnStack#72 ·
Los mantenedores suelen responder en 1 día
-
Feature: admin dashboardAbiertoenhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
kasuken/LearnStack#71 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
kasuken/LearnStack#70 ·
Los mantenedores suelen responder en 1 día
-
Feature: public profile pagesAbiertoenhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 45/100
kasuken/LearnStack#69 ·
Los mantenedores suelen responder en 1 día
Todos los issues de kasuken/LearnStack
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
agentic-os-org/ANOLISA#6742 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
type/automation type/tech-debt
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
paperclipai/paperclip#15628 ·
Los mantenedores suelen responder en 1 día
-
feature/cohorts feature/feature-flags team/feature-flags
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
Los mantenedores suelen responder en 1 día