Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
teknikattan-scoring-system
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
tddd96-grupp1
teknikattan-scoring-system
Merge requests
!132
Resolve "Fix move slides on backend"
Code
Review changes
Check out branch
Download
Patches
Plain diff
Merged
Resolve "Fix move slides on backend"
161-fix-move-slides-on-backend
into
dev
Overview
0
Commits
12
Pipelines
1
Changes
1
Merged
Victor Löfgren
requested to merge
161-fix-move-slides-on-backend
into
dev
4 years ago
Overview
0
Commits
12
Pipelines
1
Changes
1
Expand
Closes
#161 (closed)
0
0
Merge request reports
Viewing commit
e19cee09
Prev
Next
Show latest version
1 file
+
19
−
2
Inline
Compare changes
Side-by-side
Inline
Show whitespace changes
Show one file at a time
e19cee09
Add some more comments to move_slides()
· e19cee09
Victor Löfgren
authored
4 years ago
server/app/database/controller/utils.py
+
19
−
2
Options
@@ -18,7 +18,6 @@ def move_slides(item_competition, from_order, to_order):
assert
0
<=
from_order
<
num_slides
,
"
Invalid order to move from
"
assert
0
<=
to_order
<
num_slides
,
"
Invalid order to move to
"
# TODO: Please improve this terrible piece of code
# This function is sooo terrible, someone please tell me how to update
# multiple values in the database at the same time with unique constraints.
# If you update all the values at the same time none of them will collide
@@ -26,36 +25,54 @@ def move_slides(item_competition, from_order, to_order):
# other value before and then change every value back to the correct one,
# so 2 commits.
# An example will follow the entire code to make it clear what it does
# Lets say we have 5 slides, and we want to move the slide at index 1
# to index 4.
# We begin with a list of slides with orders [0, 1, 2, 3, 4]
slides
=
item_competition
.
slides
change
=
1
if
to_order
<
from_order
else
-
1
start_order
=
min
(
from_order
,
to_order
)
end_order
=
max
(
from_order
,
to_order
)
# Move slides up 100
for
item_slide
in
slides
:
item_slide
.
order
+=
100
# Our slide orders now look like [100, 101, 102, 103, 104]
# Move slides between from and to order either up or down, but minus in front
for
item_slide
in
slides
:
if
start_order
<=
item_slide
.
order
-
100
<=
end_order
:
item_slide
.
order
=
-
(
item_slide
.
order
+
change
)
# Our slide orders now look like [100, -100, -101, -102, -103]
# Find the slide that was to be moved and change it to correct order with minus in front
for
item_slide
in
slides
:
if
item_slide
.
order
==
-
(
from_order
+
change
+
100
):
item_slide
.
order
=
-
(
to_order
+
100
)
break
# Our slide orders now look like [100, -104, -101, -102, -103]
db
.
session
.
commit
()
# Negate all order so that they become
correct and
positive
# Negate all order so that they become positive
for
item_slide
in
slides
:
if
start_order
<=
-
(
item_slide
.
order
+
100
)
<=
end_order
:
item_slide
.
order
=
-
(
item_slide
.
order
)
# Our slide orders now look like [100, 104, 101, 102, 103]
for
item_slide
in
slides
:
item_slide
.
order
-=
100
# Our slide orders now look like [0, 4, 1, 2, 3]
# We have now successfully moved slide 1 to 4
return
commit_and_refresh
(
item_competition
)
Loading