7 Commits
0.7.0 ... 0.8.0

17 changed files with 2982 additions and 2579 deletions

View File

@ -2,7 +2,7 @@
include "src/main/nim/personal_measure_apipkg/version.nim"
version = PM_API_VERSION
version = "0.8.0"
author = "Jonathan Bernard"
description = "JDB\'s Personal Measures API"
license = "MIT"
@ -17,5 +17,5 @@ requires @["nim >= 0.19.4", "bcrypt", "docopt >= 0.6.8", "isaac >= 0.1.3",
"jester >= 0.4.3", "jwt", "tempfile", "uuids >= 0.1.10" ]
requires "https://git.jdb-labs.com/jdb/nim-cli-utils.git >= 0.6.3"
requires "https://git.jdb-labs.com/jdb/nim-time-utils.git >= 0.5.0"
requires "https://git.jdb-labs.com/jdb-labs/fiber-orm-nim.git >= 0.2.0"
requires "https://git.jdb-labs.com/jdb/nim-time-utils.git >= 0.5.2"
requires "https://git.jdb-labs.com/jdb-labs/fiber-orm-nim.git >= 0.3.0"

View File

@ -1,7 +1,8 @@
import asyncdispatch, base64, jester, json, jwt, logging, options, sequtils,
strutils, times, uuids
times, uuids
from unicode import capitalize
import timeutils except `<`
import strutils except capitalize
import timeutils
import ./db, ./configuration, ./models, ./service, ./version
@ -476,7 +477,7 @@ proc start*(ctx: PMApiContext): void =
let newMeasurement = Measurement(
measureId: measure.id,
value: jsonBody.getOrFail("value").getInt,
value: jsonBody.getOrFail("value").getFloat,
timestamp:
if jsonBody.hasKey("timestamp"): jsonBody["timestamp"].getStr.parseIso8601.utc
else: getTime().utc,
@ -515,7 +516,7 @@ proc start*(ctx: PMApiContext): void =
let measure = ctx.getMeasureForSlug(session.user.id, @"slug")
var measurement = ctx.getMeasurementForMeasure(measure.id, parseUUID(@"id"))
let jsonBody = parseJson(request.body)
if jsonBody.hasKey("value"): measurement.value = jsonBody["value"].getInt
if jsonBody.hasKey("value"): measurement.value = jsonBody["value"].getFloat
if jsonBody.hasKey("timestamp"): measurement.timestamp = jsonBody["timestamp"].getStr.parseIso8601
if jsonBody.hasKey("extData"): measurement.extData = jsonBody["extData"]
jsonResp($(%ctx.db.updateMeasurement(measurement)))

View File

@ -28,7 +28,7 @@ type
Measurement* = object
id*: UUID
measureId*: UUID
value*: int
value*: float
timestamp*: DateTime
extData*: JsonNode

View File

@ -1 +1 @@
const PM_API_VERSION* = "0.7.0"
const PM_API_VERSION* = "0.8.0"

View File

@ -0,0 +1,2 @@
-- DOWN script for measure-value-is-numeric (20200216230431)
alter table "measurements" alter column "value" type integer;

View File

@ -0,0 +1,2 @@
-- UP script for measure-value-is-numeric (20200216230431)
alter table "measurements" alter column "value" type numeric;

View File

@ -47,9 +47,13 @@ printf ">> Updating /api/src/main/nim/personal_measure_apipkg/version.nim with P
printf "sed -i \"s/%s/%s/\" api/src/main/nim/personal_measure_apipkg/version.nim" "$lastVersion" "$newVersion"
sed -i "s/${lastVersion}/${newVersion}/" api/src/main/nim/personal_measure_apipkg/version.nim
printf ">> Updating /api/personal_measure_api.nimble with version = \"%s\"" "$newVersion"
printf "sed -i \"s/%s/%s/\" api/personal_measure_api.nimble" "$lastVersion" "$newVersion"
sed -i "s/${lastVersion}/${newVersion}/" api/personal_measure_api.nimble
printf ">> Committing new version.\n"
printf "git add web/package.json web/package-lock.json api/src/main/nim/personal_measure_apipkg/version.nim"
git add web/package.json web/package-lock.json api/src/main/nim/personal_measure_apipkg/version.nim
git add web/package.json web/package-lock.json api/src/main/nim/personal_measure_apipkg/version.nim api/personal_measure_api.nimble
printf "git commit -m \"Update package version to %s\"\n" "$newVersion"
git commit -m "Update package version to ${newVersion}"

5462
web/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "personal-measure-web",
"version": "0.7.0",
"version": "0.8.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
@ -10,52 +10,52 @@
"test:unit": "vue-cli-service test:unit"
},
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^1.2.15",
"@fortawesome/free-solid-svg-icons": "^5.7.2",
"@fortawesome/vue-fontawesome": "^0.1.5",
"@types/js-cookie": "^2.2.1",
"@fortawesome/fontawesome-svg-core": "^1.2.27",
"@fortawesome/free-solid-svg-icons": "^5.12.1",
"@fortawesome/vue-fontawesome": "^0.1.9",
"@types/js-cookie": "^2.2.4",
"@types/jwt-decode": "^2.2.1",
"@types/lodash.assign": "^4.2.6",
"@types/lodash.findindex": "^4.6.6",
"@types/lodash.merge": "^4.6.5",
"apexcharts": "^3.6.5",
"@types/lodash.merge": "^4.6.6",
"apexcharts": "^3.15.6",
"axios": "^0.18.1",
"js-cookie": "^2.2.0",
"js-cookie": "^2.2.1",
"jwt-decode": "^2.2.0",
"keen-ui": "^1.1.2",
"keen-ui": "^1.2.1",
"lodash.assign": "^4.2.0",
"lodash.findindex": "^4.6.0",
"lodash.keyby": "^4.6.0",
"lodash.merge": "^4.6.2",
"moment": "^2.24.0",
"register-service-worker": "^1.5.2",
"vue": "^2.6.6",
"vue-apexcharts": "^1.3.2",
"vue": "^2.6.11",
"vue-apexcharts": "^1.5.2",
"vue-class-component": "^6.0.0",
"vue-property-decorator": "^7.0.0",
"vue-router": "^3.0.1",
"vue-router": "^3.1.5",
"vuejs-smart-table": "0.0.3",
"vuex": "^3.0.1",
"vuex-module-decorators": "^0.9.8"
"vuex": "^3.1.2",
"vuex-module-decorators": "^0.9.11"
},
"devDependencies": {
"@types/jest": "^23.1.4",
"@types/lodash.keyby": "^4.6.6",
"@vue/cli-plugin-babel": "^3.4.0",
"@vue/cli-plugin-pwa": "^3.4.0",
"@vue/cli-plugin-typescript": "^3.4.0",
"@vue/cli-plugin-unit-jest": "^3.7.0",
"@vue/cli-service": "^3.5.3",
"@vue/test-utils": "^1.0.0-beta.20",
"@vue/cli-plugin-babel": "^3.12.1",
"@vue/cli-plugin-pwa": "^3.12.1",
"@vue/cli-plugin-typescript": "^3.12.1",
"@vue/cli-plugin-unit-jest": "^3.12.1",
"@vue/cli-service": "^3.12.1",
"@vue/test-utils": "^1.0.0-beta.31",
"babel-core": "7.0.0-bridge.0",
"lint-staged": "^8.1.0",
"lint-staged": "^8.2.1",
"live-server": "^1.2.1",
"node-sass": "^4.13.1",
"sass-loader": "^7.1.0",
"sass-loader": "^7.3.1",
"ts-jest": "^23.0.0",
"typescript": "^3.0.0",
"vue-cli-plugin-webpack-bundle-analyzer": "^1.3.0",
"vue-template-compiler": "^2.5.21"
"typescript": "^3.7.5",
"vue-cli-plugin-webpack-bundle-analyzer": "^1.4.0",
"vue-template-compiler": "^2.6.11"
},
"gitHooks": {
"pre-commit": "lint-staged"

View File

@ -2,6 +2,7 @@
<div id="app">
<NavBar></NavBar>
<router-view class=main />
<span id="personal-measure-version" hidden>{{ version }}</span>
</div>
</template>
<script lang="ts" src="./app.ts"></script>

View File

@ -15,9 +15,10 @@ export class SimpleDetails extends Vue {
// private newMeasurement;
private moment = moment;
private chartOptions = {
markers: { size: 6 },
noData: { text: 'no data',
style: { fontSize: '18px' } },
stroke: { curve: 'smooth' },
stroke: { curve: 'straight' },
xaxis: { type: 'datetime' }
};

View File

@ -1,5 +1,5 @@
<template>
<div v-if="measure.config.isVisible" class="measure-summary" :data-name="'measure-' + measure.slug">
<div v-if="measure.config.isVisible" v-bind:key="measure.slug" class="measure-summary" :data-name="'measure-' + measure.slug">
<h2><router-link
:to="'/measures/' + measure.slug">
{{measure.name}}</router-link></h2>

View File

@ -9,14 +9,14 @@ export class SimpleSummaryGraph extends Vue {
private chartOptions = {
chart: { sparkline: { enabled: true } },
grid: { padding: { top: 20 }},
stroke: { curve: 'smooth' },
stroke: { curve: 'straight' },
noData: { text: 'no data',
style: { fontSize: '18px' } },
xaxis: { type: 'datetime' }
};
private get measurementData(): ApexAxisChartSeries {
let measurementData = this.measurements.slice() || [];
const measurementData = this.measurements.slice() || [];
return [{
name: this.measure.name,

View File

@ -12,7 +12,7 @@
</div>
<div>
<label for=measurementValue>{{measure.name}}</label>
<input required type=number v-model=value.value :disabled=disabled />
<input name=measurementValue required type=number step=any v-model.number=value.value :disabled=disabled />
</div>
</fieldset>
</template>

View File

@ -5,7 +5,7 @@ import { Measure, MeasureConfig, MeasureType, Measurement, MeasurementMeta } fro
export class SimpleEntry extends Vue {
@Prop() public measure!: Measure<MeasureConfig>;
@Prop() public value!: Measurement<MeasurementMeta>;
@Prop() public disabled: boolean = false;
@Prop() public disabled!: boolean;
private editTimestamp: boolean = false;
@Watch('value', { immediate: true, deep: true })

View File

@ -54,7 +54,7 @@ export class MeasurementStoreModule extends VuexModule {
const newMeasurements = existing.slice();
const index = findIndex(existing, { id: measurement.id });
if (index > 0) { newMeasurements.push(measurement); }
if (index < 0) { newMeasurements.push(measurement); }
else { newMeasurements[index] = measurement; }
this.measurements = assign({}, this.measurements, { [measure.id]: newMeasurements });
}

View File

@ -1,5 +1,7 @@
.user-account {
justify-content: flex-start;
section {
margin-top: 1rem;
margin-top: 2rem;
}
}