Changeset 447c39f


Ignore:
Timestamp:
06/22/26 16:56:41 (3 months ago)
Author:
Andrej <asumanovski@…>
Branches:
master
Children:
194c016
Parents:
42da64d
Message:

Improved UI and small fixes

Files:
6 added
7 edited

Legend:

Unmodified
Added
Removed
  • backend/src/main/java/com/trekr/backend/dto/training/CreateTrainingSessionRequest.java

    r42da64d r447c39f  
    44import jakarta.validation.constraints.NotBlank;
    55import jakarta.validation.constraints.NotNull;
     6import jakarta.validation.constraints.PastOrPresent;
    67
    78import java.math.BigDecimal;
     9import java.time.LocalDate;
    810
    911public class CreateTrainingSessionRequest {
    … …  
    2123    @DecimalMin(value = "0", inclusive = true)
    2224    private BigDecimal calories;
     25
     26    @PastOrPresent
     27    private LocalDate date;
    2328
    2429    public CreateTrainingSessionRequest() {
    … …  
    5661        this.calories = calories;
    5762    }
     63
     64    public LocalDate getDate() {
     65        return date;
     66    }
     67
     68    public void setDate(LocalDate date) {
     69        this.date = date;
     70    }
    5871}
  • backend/src/main/java/com/trekr/backend/service/TrainingService.java

    r42da64d r447c39f  
    177177        session.setDuration(durationMinutes);
    178178        session.setCalories(calories);
    179         session.setDate(LocalDate.now());
     179        // Allow client to supply a date (past or present). If not provided, use today.
     180        java.time.LocalDate suppliedDate = request.getDate();
     181        if (suppliedDate == null) {
     182            suppliedDate = LocalDate.now();
     183        }
     184        if (suppliedDate.isAfter(LocalDate.now())) {
     185            throw new RuntimeException("Date cannot be in the future");
     186        }
     187        session.setDate(suppliedDate);
    180188
    181189        TrainingSession saved = trainingSessionRepository.save(session);
  • db-scripts/tunnel_scripta.sh

    r42da64d r447c39f  
    55echo "AKO SAKATE DA SLUSHA NA DRUGA PORTA, SMENETE JA SKRIPTATA SOODVETNO"
    66echo "AKO SAKATE DA STOPIRATE (CTRL+C)"
    7 read -p "Press any key to continue ..."
    87
    9 ssh -v -2 -C -N -L 9999:localhost:5432 t_trekr@194.149.135.130
     8
     9sshpass -p '459499b8' ssh -v -2 -C -N -L 9999:localhost:5432 t_trekr@194.149.135.130
    1010
    1111echo "VRSKATA TREBA DA STOI OTVORENA SE DODEKA IMATE PRISTAP DO SERVEROT"
    … …  
    1313echo "AKO TOA SE SLUCHILO SAMO OD SEBE, IMATE PROBLEM SO VOSPOSTAVUVANJE"
    1414echo "NA VRSKATA DO SERVEROT (BLOKADA) ILI VI SE POGRESHNI PARAMETRITE"
    15 read -p "Press any key to continue ..."
  • frontend/index.html

    r42da64d r447c39f  
    33  <head>
    44    <meta charset="UTF-8" />
    5     <link rel="icon" type="image/svg+xml" href="/vite.svg" />
     5    <link rel="icon" type="image/svg+xml" href="/favicon.png" />
    66    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    7     <title>frontend</title>
     7    <title>Trekr</title>
    88  </head>
    99  <body>
  • frontend/src/pages/Dashboard/pages/Discipline/DisciplineTracking.jsx

    r42da64d r447c39f  
    293293
    294294  const isTodayClosed = useMemo(() => {
     295    console.log('todayIso:', todayIso);
    295296    return (dailyCompletions ?? []).some((dc) => dc?.date === todayIso);
    296297  }, [dailyCompletions, todayIso]);
  • frontend/src/pages/Dashboard/pages/Finance/components/NewIncomeForm.jsx

    r42da64d r447c39f  
    44  const [date, setDate] = useState(() => {
    55    const d = new Date();
     6    console.log('Date:', d);
    67    return d.toISOString().slice(0, 10);
    78  });
  • frontend/src/pages/Dashboard/pages/Training/NewTrainingSession.jsx

    r42da64d r447c39f  
    1818  const [autoCalculateCalories, setAutoCalculateCalories] = useState(true);
    1919  const [calories, setCalories] = useState("");
     20  const [date, setDate] = useState(() => new Date().toISOString().slice(0, 10));
    2021
    2122  const [error, setError] = useState("");
    … …  
    9596    }
    9697
     98    // Date must not be in the future (allow past or today)
     99    const todayStr = new Date().toISOString().slice(0, 10);
     100    if (!date || date > todayStr) {
     101      setError("Date cannot be in the future.");
     102      return;
     103    }
     104
    97105    const caloriesNum = calories === "" ? NaN : Number(calories);
    98106    if (!autoCalculateCalories) {
    … …  
    108116        type,
    109117        durationMinutes: durationNum,
     118        date,
    110119        autoCalculateCalories,
    111120        calories: autoCalculateCalories ? null : caloriesNum,
    … …  
    145154          ) : null}
    146155
    147           <div className="mt-4 grid grid-cols-1 gap-4 md:grid-cols-2">
     156          <div className="mt-4 grid grid-cols-1 gap-4 md:grid-cols-3">
    148157            <WorkoutTypeSelect
    149158              workoutTypes={workoutTypes}
    … …  
    165174                disabled={isLoading}
    166175              />
     176            </div>
     177
     178            <div>
     179              <label className="label">Date</label>
     180              <input
     181                type="date"
     182                className="input input-bordered w-full"
     183                value={date}
     184                onChange={(e) => setDate(e.target.value)}
     185                max={new Date().toISOString().slice(0, 10)}
     186                required
     187                disabled={isLoading}
     188              />
     189              <p className="text-xs opacity-70 mt-1">Choose a past date or today (no future dates).</p>
    167190            </div>
    168191          </div>
Note: See TracChangeset for help on using the changeset viewer.