haakjacobs
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Versions and GitHub Sync Note Insights Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       owned this note    owned this note      
    Published Linked with GitHub
    Subscribed
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    Subscribe
    # Beskrivelse av applikasjonen Appen er en serverapplikasjon som lar brukere loggføre treningsøktene sine. Øktene blir presentert for brukeren i en tabellvisning med mulighet for å sortere øktene. Man kan f.eks. sorte etter alfabetisk rekkefølge, dato, og når på dagen økten ble startet/avsluttet. <br>Applikasjonen var tiltenkt vidre funksjonaliteter som en kalorikalutlator ([se brukerhistorie 3](#Brukerhistorier)), men etter oppfordringerer valgte vi heller å bruke mer tid på testing og kodekvalitet. # Slik bruker du applikasjonen ## Logg-inn ![Logginn skjerm](resources/loggInn.png) Ved å skirve inn brukernavn og passord i deres respektive felt, kan man logge seg inn med en tidligere regisrert bruker ved å trykke på **Log in** knappen. Om man heller ønsker å opprette en ny bruker <br>registrere ny bruker med **"Sign up"** knappen.</br> Om man ønsker å teste en bruker som allerede har lagret data, kan man logge seg inn med:<br>Brukernavn: `user1`<br> Passord:`password1`. ## Registrering av treningsøkter ![Registreringskjerma](resources/Session.png) Ved å trykke på knappen med kalenderikonet eller datofeltet får man opp en kaldender, der man kan velge en dato. Videre fyller man ut titelen på treningsøktenved å skrive inn i inputfeltet. Neste steg blir å fylle inn **starttid** og **sluttid**. Deretter ved å trykke på **save"** lagrer man økten, og legger den inn i treningsloggen din. Sortering av treningsøktene gjøres ved å trykke på **Session name**, **Date**, **Start time**, **End time**. # Brukerhistorier **1.** Som en bruker av denne appen, har jeg lyst til å logge meg inn slik at jeg kan registrer den siste treningsøkten min. **2.** Som en bruker av denne appen, har lyst å logg meg inn slik at jeg kan se mine tidligere registrerte treningsøkter. **3.** Som en bruker av denne appen, har jeg har lyst til å registrere kaloriene mine slik at jeg kan se kaloriebalansen. **4.** Som enn bruker av denne appen, har jeg har lyst til å slette registrerte treningsøkter slik at jeg kan fjerne uønskede treningsøkter. **5.** Som en bruker av denne appen, har jeg lyst til å sortere mine treningsøkter, slik at jeg kan presentere utvalget slik jeg ønsker. # Klassediagram av core [klassediagram](resources/DiagramCore.png) # Pakkediagram [pakkediagram](resources/pakkediagram_treningsapp.png) # Oppdeling i controllere og fxui. Appen har tre kontrollere **TreningsAppController**, **RegisterController** og **AddSessionController**. Disse kontrollerene er kontrollere for vær sin fxml fil. For at controllerene skal kommunisere har vi valgt å bruke [Mediator Patternen](https://www.baeldung.com/java-mediator-pattern) gjennom **ControllerMediator** som holder på instanser av kontrollerne. # Struktur ### Tester Vi har egne tester til lagene og en tilpasset maven modul, som arver fra en parent modul. ### Core i core er domenelaget til appen. Core tar seg av logikk til appen. Core har 3 klasser. **User**, **UserHandler** og **Sessions**. **User** tar seg av User-objektet. Brukeren har et brukernavn, et passord og en liste med session. **Sessions** har en tittel, en startdato og en sluttdato. **UserHandler** har en liste med brukere og er den klassen som tar seg av brukerhåndteringer. Core tar seg også av alle serializerene, som gjør om fra *json* til et objekt og omvendt. ### Fxui Fxui er brukergrensesnittlaget til appen. Fxui står for behandligen av grensesnittet. I fxui ligger alle kontrollerene og fxml filene til appen. Det er herifra man kjører appen. Dette gjør klassen **TreninsApp**. Grensesnittet og kontrollerene blir koblet med restserveren ved hjelp av **TreningsAppAccess** klassen. Denne klassen sender *HTTP* requests til serveren og gjør at appen oppdaterer seg. Accessklassen har en UserHandler lagret lokalt som en cache. Dette er for å hindre at det blir sendt så mange get forespørsler til serveren. Vi oppnår dette ved å kun hente UserHandler ved oppstart, og hvis det er data vi mangler. Alle metoder som oppdaterer UserHandler vil også putte endring til serveren. ### Restapi og Restserver Restapiet er bygget opp slik at man kan hente en bruker, legge til en bruker, legge til en treningsøkt hos brukeren og slette en økt fra brukeren. Restapiet består av to klassser **TreningsAppResources** og **TreningsAppService**. **TreningsAppService** er den første klassen som får http forespørselen, her henter vi ut *UserHandler* hvis dette er formålet med forespørselen. Alle forespørsler som henviser til en spesifikk bruker blir sendt videre til **TreningsAppResources**. Denne klassen håndterer registrering av ny bruker, sletting og registrering av treningsøkt. Restserveren inneholder to klasser: **ObjectMapperProvider** og **TreningsAppConfig**. **ObjectMapperProvider** er en klassse som hjelper med serialiseringen av objekter ved å hente JacksonModule fra persistenslaget. Denne "hjelpeklassen" er nyttig når man mottar objekter i forespørsler og ved senere lagring til fil. **TreningsAppConfig** forteller hvilken path man skal lese og skrive til fil på. *configen* inneholder en *UserHandler* som lagrer all informasjonen om brukerene. Denne klassen setter opp UserHandler med nødvendig informasjon til jetty-serveren starter. Lagring på serveren er per nå bare i et UserHandler objekt, dette vil si at informasjonen som blir sendt til serveren kun ligger i en "cache" og ved en stop av serveren vil informasjonen bli slettet. En senere utvikling vil være å ha en save metode i rest api som skriver til json fila som configen leser fra. ![sekvens diagram](resources/sekvensdiagram.png) sekvensdiagrammet forklarer enkelt hvordan en bruker kan logge inn og legge til en treningsøkt, og hvordan de intragerer i grove trekk på brukeren, fxui og serveren sin side. Brukeren blir møtt med en login skjerm der man fyller inn brukerinfo og trykker login. Hvis brukernavn og passord stemmer overens med en av brukerene på serveren, så vil man bli logget inn. Da vil grensesnittet bli satt til actionPane, og tmpUser/innlogget bruker blir satt til din bruker. Herifra kan man legge til en treningsøkt. som vil bli lagret i user sine økter. Brukeren vil bli lagt på serversiden og fxui vil vise at økten har blitt lagt til.

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully