Changeset 447c39f


Ignore:
Timestamp:
06/22/26 16:56:41 (2 weeks 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.