From 38af7ef79ef3008a4a1b964db76252e0520d2fcc Mon Sep 17 00:00:00 2001 From: felix1251 Date: Sun, 17 Mar 2024 03:20:14 +0800 Subject: [PATCH 01/12] only show complete tracks data --- app/views/reports/index.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/reports/index.html.haml b/app/views/reports/index.html.haml index e664ee8..38fc6a8 100644 --- a/app/views/reports/index.html.haml +++ b/app/views/reports/index.html.haml @@ -3,8 +3,8 @@ .px-8.py-5.bg-white.rounded.flex.flex-col.gap-2.shadow.border %h1.text-zinc-600 Total hours spent %span.font-medium.text-xl - = seconds_to_hms(current_user.tracks.sum(:total_seconds)) + = seconds_to_hms(current_user.tracks.complete.sum(:total_seconds)) .px-8.py-5.bg-white.rounded.flex.flex-col.gap-2.shadow.border %h1.text-zinc-600 Total tracks %span.font-medium.text-xl - = current_user.tracks.count \ No newline at end of file + = current_user.tracks.complete.count \ No newline at end of file From 3ef19e531afaa91312c62cce935a03d4a540896c Mon Sep 17 00:00:00 2001 From: felix1251 Date: Sun, 17 Mar 2024 05:51:28 +0800 Subject: [PATCH 02/12] comment on tracks capture_total_time --- app/models/track.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/models/track.rb b/app/models/track.rb index d8cb047..c31bcfc 100644 --- a/app/models/track.rb +++ b/app/models/track.rb @@ -14,7 +14,8 @@ class Track < ApplicationRecord validates :started_at, comparison: { less_than_or_equal_to: :ended_at }, if: :ended_at - before_save :capture_total_hour, if: :ended_at + # capture total time for easier query of total time using group_by + before_save :capture_total_time, if: :ended_at def countdown? ended_at.blank? @@ -27,7 +28,7 @@ def date_started private - def capture_total_hour + def capture_total_time self.total_seconds = ended_at.to_i - started_at.to_i end end From 021b49f6509e6831f1c7b8b154dbdc947723f92c Mon Sep 17 00:00:00 2001 From: felix1251 Date: Sun, 17 Mar 2024 05:53:09 +0800 Subject: [PATCH 03/12] remove unused views and actions --- app/controllers/tracks_controller.rb | 18 +----------------- app/views/tracks/_form.html.haml | 19 ------------------- app/views/tracks/edit.html.haml | 7 ------- app/views/tracks/new.html.haml | 5 ----- app/views/tracks/show.html.haml | 15 --------------- 5 files changed, 1 insertion(+), 63 deletions(-) delete mode 100644 app/views/tracks/_form.html.haml delete mode 100644 app/views/tracks/edit.html.haml delete mode 100644 app/views/tracks/new.html.haml delete mode 100644 app/views/tracks/show.html.haml diff --git a/app/controllers/tracks_controller.rb b/app/controllers/tracks_controller.rb index cbef20a..c60ac8c 100644 --- a/app/controllers/tracks_controller.rb +++ b/app/controllers/tracks_controller.rb @@ -1,23 +1,7 @@ # frozen_string_literal: true class TracksController < ApplicationController - before_action :set_track, only: %i[show edit update destroy] - - # GET /tracks or /tracks.json - def index - @tracks = Track.all - end - - # GET /tracks/1 or /tracks/1.json - def show; end - - # GET /tracks/new - def new - @track = Track.new - end - - # GET /tracks/1/edit - def edit; end + before_action :set_track, only: %i[update destroy] # POST /tracks or /tracks.json def create diff --git a/app/views/tracks/_form.html.haml b/app/views/tracks/_form.html.haml deleted file mode 100644 index 4b5e875..0000000 --- a/app/views/tracks/_form.html.haml +++ /dev/null @@ -1,19 +0,0 @@ -= form_for @track do |f| - - if @track.errors.any? - #error_explanation - %h2= "#{pluralize(@track.errors.count, "error")} prohibited this track from being saved:" - %ul - - @track.errors.full_messages.each do |message| - %li= message - - .field - = f.label :user - = f.text_field :user - .field - = f.label :tag - = f.text_field :tag - .field - = f.label :activity - = f.text_field :activity - .actions - = f.submit 'Save' diff --git a/app/views/tracks/edit.html.haml b/app/views/tracks/edit.html.haml deleted file mode 100644 index e0a6875..0000000 --- a/app/views/tracks/edit.html.haml +++ /dev/null @@ -1,7 +0,0 @@ -%h1 Editing track - -= render 'form' - -= link_to 'Show', @track -\| -= link_to 'Back', tracks_path diff --git a/app/views/tracks/new.html.haml b/app/views/tracks/new.html.haml deleted file mode 100644 index faa5df7..0000000 --- a/app/views/tracks/new.html.haml +++ /dev/null @@ -1,5 +0,0 @@ -%h1 New track - -= render 'form' - -= link_to 'Back', tracks_path diff --git a/app/views/tracks/show.html.haml b/app/views/tracks/show.html.haml deleted file mode 100644 index 0bfd10a..0000000 --- a/app/views/tracks/show.html.haml +++ /dev/null @@ -1,15 +0,0 @@ -%p#notice= notice - -%p - %b User: - = @track.user -%p - %b Tag: - = @track.tag -%p - %b Activity: - = @track.activity - -= link_to 'Edit', edit_track_path(@track) -\| -= link_to 'Back', tracks_path From c8f1162815ea30d20fa0b7d94bdc1aeed5c6782c Mon Sep 17 00:00:00 2001 From: felix1251 Date: Sun, 17 Mar 2024 05:55:59 +0800 Subject: [PATCH 04/12] comment js controllers --- app/javascript/controllers/countdown_controller.js | 2 ++ app/javascript/controllers/tracks_controller.js | 1 + 2 files changed, 3 insertions(+) diff --git a/app/javascript/controllers/countdown_controller.js b/app/javascript/controllers/countdown_controller.js index ac2c6b6..b34a295 100644 --- a/app/javascript/controllers/countdown_controller.js +++ b/app/javascript/controllers/countdown_controller.js @@ -6,6 +6,8 @@ export default class extends Controller { connect() { this.secondsUntilEndTime = Number(this.countdownTarget.dataset.secondsUntilEndTime) + + // update coundown every one second this.countdown = setInterval(this.countdown.bind(this), 1000); } diff --git a/app/javascript/controllers/tracks_controller.js b/app/javascript/controllers/tracks_controller.js index d427d08..5a2e0a8 100644 --- a/app/javascript/controllers/tracks_controller.js +++ b/app/javascript/controllers/tracks_controller.js @@ -10,6 +10,7 @@ export default class extends Controller { // Create an observer instance const observer = new MutationObserver(() => this.calculate()); + // detect if chiild element is changing observer.observe(this.element, { childList: true }); } From 80f7db44570697ac691a397ab15ad26072b50a24 Mon Sep 17 00:00:00 2001 From: felix1251 Date: Sun, 17 Mar 2024 05:56:58 +0800 Subject: [PATCH 05/12] comment js controllers --- app/javascript/controllers/tracks_controller.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app/javascript/controllers/tracks_controller.js b/app/javascript/controllers/tracks_controller.js index 5a2e0a8..d1686e8 100644 --- a/app/javascript/controllers/tracks_controller.js +++ b/app/javascript/controllers/tracks_controller.js @@ -18,6 +18,7 @@ export default class extends Controller { if(this.itemTargets.length == 0){ this.element.remove() return; + // exit if no chuld element } this.totalSeconds = 0 From ef79294d722d681c813f91add5acc6f85354a0af Mon Sep 17 00:00:00 2001 From: felix1251 Date: Sun, 17 Mar 2024 05:57:53 +0800 Subject: [PATCH 06/12] comment js controllers --- app/javascript/controllers/tracks_controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/controllers/tracks_controller.js b/app/javascript/controllers/tracks_controller.js index d1686e8..84cf1c8 100644 --- a/app/javascript/controllers/tracks_controller.js +++ b/app/javascript/controllers/tracks_controller.js @@ -18,7 +18,7 @@ export default class extends Controller { if(this.itemTargets.length == 0){ this.element.remove() return; - // exit if no chuld element + // remove element if no chuld element } this.totalSeconds = 0 From 22a202a38e1d785d0fd99ec5fdbc634c1b6b3a36 Mon Sep 17 00:00:00 2001 From: felix1251 Date: Sun, 17 Mar 2024 05:58:55 +0800 Subject: [PATCH 07/12] remove track index view --- app/views/tracks/index.html.haml | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 app/views/tracks/index.html.haml diff --git a/app/views/tracks/index.html.haml b/app/views/tracks/index.html.haml deleted file mode 100644 index af33e1d..0000000 --- a/app/views/tracks/index.html.haml +++ /dev/null @@ -1,25 +0,0 @@ -%h1 Listing tracks - -%table - %thead - %tr - %th User - %th Tag - %th Activity - %th - %th - %th - - %tbody - - @tracks.each do |track| - %tr - %td= track.user - %td= track.tag - %td= track.activity - %td= link_to 'Show', track - %td= link_to 'Edit', edit_track_path(track) - %td= link_to 'Destroy', track, method: :delete, data: { confirm: 'Are you sure?' } - -%br - -= link_to 'New Track', new_track_path From e6ced3729e56516edc814dcb2502c81d9fa11b45 Mon Sep 17 00:00:00 2001 From: felix1251 Date: Sun, 17 Mar 2024 06:02:32 +0800 Subject: [PATCH 08/12] update readme: add local server port info --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 17a38c2..f3f58ce 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,12 @@ docker compose -f docker-compose.dev.yml up -d > We control all the commands inside our time_tracker_container. > All logic or changes will reflect in our project directory because volume are shared between our container +Local server port (this is served from our docker container) + +``` +http://127.0.0.1:3000/ +``` + Open rails project container ``` From 13eb80b1a7f055c3c251a953244e38316f4ced9d Mon Sep 17 00:00:00 2001 From: felix1251 Date: Sun, 17 Mar 2024 06:04:41 +0800 Subject: [PATCH 09/12] add tags controller --- app/controllers/tags_controller.rb | 11 +++++++++++ app/helpers/tags_helper.rb | 4 ++++ app/views/tags/create.html.haml | 2 ++ app/views/tags/destroy.html.haml | 2 ++ app/views/tags/index.html.haml | 2 ++ app/views/tags/update.html.haml | 2 ++ config/routes.rb | 4 ++++ test/controllers/tags_controller_test.rb | 25 ++++++++++++++++++++++++ 8 files changed, 52 insertions(+) create mode 100644 app/controllers/tags_controller.rb create mode 100644 app/helpers/tags_helper.rb create mode 100644 app/views/tags/create.html.haml create mode 100644 app/views/tags/destroy.html.haml create mode 100644 app/views/tags/index.html.haml create mode 100644 app/views/tags/update.html.haml create mode 100644 test/controllers/tags_controller_test.rb diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb new file mode 100644 index 0000000..a79f593 --- /dev/null +++ b/app/controllers/tags_controller.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class TagsController < ApplicationController + def index; end + + def create; end + + def update; end + + def destroy; end +end diff --git a/app/helpers/tags_helper.rb b/app/helpers/tags_helper.rb new file mode 100644 index 0000000..5b2b3ca --- /dev/null +++ b/app/helpers/tags_helper.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +module TagsHelper +end diff --git a/app/views/tags/create.html.haml b/app/views/tags/create.html.haml new file mode 100644 index 0000000..ee0e9aa --- /dev/null +++ b/app/views/tags/create.html.haml @@ -0,0 +1,2 @@ +%h1 Tags#create +%p Find me in app/views/tags/create.html.haml diff --git a/app/views/tags/destroy.html.haml b/app/views/tags/destroy.html.haml new file mode 100644 index 0000000..079ecec --- /dev/null +++ b/app/views/tags/destroy.html.haml @@ -0,0 +1,2 @@ +%h1 Tags#destroy +%p Find me in app/views/tags/destroy.html.haml diff --git a/app/views/tags/index.html.haml b/app/views/tags/index.html.haml new file mode 100644 index 0000000..8f2ae57 --- /dev/null +++ b/app/views/tags/index.html.haml @@ -0,0 +1,2 @@ +%h1 Tags#index +%p Find me in app/views/tags/index.html.haml diff --git a/app/views/tags/update.html.haml b/app/views/tags/update.html.haml new file mode 100644 index 0000000..4fc875e --- /dev/null +++ b/app/views/tags/update.html.haml @@ -0,0 +1,2 @@ +%h1 Tags#update +%p Find me in app/views/tags/update.html.haml diff --git a/config/routes.rb b/config/routes.rb index f38acb1..753a2c1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,8 @@ Rails.application.routes.draw do + get 'tags/index' + get 'tags/create' + get 'tags/update' + get 'tags/destroy' # Defines the root path route ("/") root "home#index" diff --git a/test/controllers/tags_controller_test.rb b/test/controllers/tags_controller_test.rb new file mode 100644 index 0000000..4c6d967 --- /dev/null +++ b/test/controllers/tags_controller_test.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'test_helper' + +class TagsControllerTest < ActionDispatch::IntegrationTest + test 'should get index' do + get tags_index_url + assert_response :success + end + + test 'should get create' do + get tags_create_url + assert_response :success + end + + test 'should get update' do + get tags_update_url + assert_response :success + end + + test 'should get destroy' do + get tags_destroy_url + assert_response :success + end +end From d937b5e762e1f8586b979b45eec43c1aca65439d Mon Sep 17 00:00:00 2001 From: felix1251 Date: Sun, 17 Mar 2024 06:06:15 +0800 Subject: [PATCH 10/12] setup tags route --- config/routes.rb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index 753a2c1..b1db9cf 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,8 +1,4 @@ Rails.application.routes.draw do - get 'tags/index' - get 'tags/create' - get 'tags/update' - get 'tags/destroy' # Defines the root path route ("/") root "home#index" @@ -10,6 +6,7 @@ resources :tracks, only: %i[update create destroy] resources :reports, only: :index + resources :tags, only: %i[index update create destroy] end # == Route Map From 72fc498291aec0228c27b39333c6072e231c6695 Mon Sep 17 00:00:00 2001 From: felix1251 Date: Sun, 17 Mar 2024 06:09:11 +0800 Subject: [PATCH 11/12] add tag form --- app/views/tags/_form.html.haml | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/views/tags/_form.html.haml diff --git a/app/views/tags/_form.html.haml b/app/views/tags/_form.html.haml new file mode 100644 index 0000000..e69de29 From 2ece27461a0336ef2a84e1ca8dd85c826935adff Mon Sep 17 00:00:00 2001 From: felix1251 Date: Sun, 17 Mar 2024 06:13:05 +0800 Subject: [PATCH 12/12] add tags in sidebar --- app/views/layouts/_sidebar.html.haml | 1 + app/views/tags/create.html.haml | 2 -- app/views/tags/destroy.html.haml | 2 -- app/views/tags/index.html.haml | 5 +++-- app/views/tags/update.html.haml | 2 -- 5 files changed, 4 insertions(+), 8 deletions(-) delete mode 100644 app/views/tags/create.html.haml delete mode 100644 app/views/tags/destroy.html.haml delete mode 100644 app/views/tags/update.html.haml diff --git a/app/views/layouts/_sidebar.html.haml b/app/views/layouts/_sidebar.html.haml index 4b71ac8..9f56a91 100644 --- a/app/views/layouts/_sidebar.html.haml +++ b/app/views/layouts/_sidebar.html.haml @@ -6,6 +6,7 @@ .flex.flex-col.mt-2 = render SidebarItemComponent.new path: root_path, name: "Manual", fa_icon: "keyboard" = render SidebarItemComponent.new path: root_path(mode: "timer"), name: "Timer", fa_icon: "clock-rotate-left" + = render SidebarItemComponent.new path: tags_path, name: "Tags", fa_icon: "tag" = render SidebarItemComponent.new path: reports_path, name: "Reports", fa_icon: "file" .py-4.px-4.grid.gap-2.sticky.bottom-0.bg-white.z-10 %span.truncate.flex.items-center.gap-2 diff --git a/app/views/tags/create.html.haml b/app/views/tags/create.html.haml deleted file mode 100644 index ee0e9aa..0000000 --- a/app/views/tags/create.html.haml +++ /dev/null @@ -1,2 +0,0 @@ -%h1 Tags#create -%p Find me in app/views/tags/create.html.haml diff --git a/app/views/tags/destroy.html.haml b/app/views/tags/destroy.html.haml deleted file mode 100644 index 079ecec..0000000 --- a/app/views/tags/destroy.html.haml +++ /dev/null @@ -1,2 +0,0 @@ -%h1 Tags#destroy -%p Find me in app/views/tags/destroy.html.haml diff --git a/app/views/tags/index.html.haml b/app/views/tags/index.html.haml index 8f2ae57..991f548 100644 --- a/app/views/tags/index.html.haml +++ b/app/views/tags/index.html.haml @@ -1,2 +1,3 @@ -%h1 Tags#index -%p Find me in app/views/tags/index.html.haml +.margin-max-screen.py-8.grid.gap-3.relative + %h1 Tags#index + %p Find me in app/views/tags/index.html.haml diff --git a/app/views/tags/update.html.haml b/app/views/tags/update.html.haml deleted file mode 100644 index 4fc875e..0000000 --- a/app/views/tags/update.html.haml +++ /dev/null @@ -1,2 +0,0 @@ -%h1 Tags#update -%p Find me in app/views/tags/update.html.haml