Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
eurhisfirm
dfih-ui
Commits
2edafb02
Commit
2edafb02
authored
Oct 17, 2018
by
Emmanuel Raviart
Browse files
Rename stock to security.
parent
1d42f894
Changes
14
Show whitespace changes
Inline
Side-by-side
README.md
View file @
2edafb02
...
@@ -15,7 +15,7 @@ Edit `src/server-config.js` to change database informations. Then
...
@@ -15,7 +15,7 @@ Edit `src/server-config.js` to change database informations. Then
npm
install
npm
install
```
```
## Retrieve or generate JSON files of issuers, s
tock
s, etc
## Retrieve or generate JSON files of issuers, s
ecuritie
s, etc
### Either retrieve JSON files from their git repository
### Either retrieve JSON files from their git repository
...
@@ -28,7 +28,7 @@ git clone https://gitlab.huma-num.fr/eurhisfirm/dfih-open-data.git data
...
@@ -28,7 +28,7 @@ git clone https://gitlab.huma-num.fr/eurhisfirm/dfih-open-data.git data
```
bash
```
bash
node_modules/.bin/babel-node scripts/generate-issuers.js
node_modules/.bin/babel-node scripts/generate-issuers.js
node_modules/.bin/babel-node scripts/generate-stock-exchanges.js
node_modules/.bin/babel-node scripts/generate-stock-exchanges.js
node_modules/.bin/babel-node scripts/generate-s
tock
s.js
node_modules/.bin/babel-node scripts/generate-s
ecuritie
s.js
```
```
## Launch server
## Launch server
...
...
src/components/SectorTreeNode.html
View file @
2edafb02
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
<ul>
<ul>
{#each rows as row (row[0])}
{#each rows as row (row[0])}
<li>
<li>
<a
id=
"{row[2]}"
href=
"/s
tock
s/{row[0]}/prices"
data-container=
"body"
data-trigger=
"manual"
data-toggle=
"popover"
<a
id=
"{row[2]}"
href=
"/s
ecuritie
s/{row[0]}/prices"
data-container=
"body"
data-trigger=
"manual"
data-toggle=
"popover"
data-html=
"true"
data-placement=
"top"
data-content=
"Loading price data..."
on:mouseenter=
"popoverHover(event)"
data-html=
"true"
data-placement=
"top"
data-content=
"Loading price data..."
on:mouseenter=
"popoverHover(event)"
on:mouseleave=
"popoverLeave(event)"
>
{row[1]}
</a>
on:mouseleave=
"popoverLeave(event)"
>
{row[1]}
</a>
</li>
</li>
...
...
src/routes/api/s
tocks/[stock
([0-9]+)]/prices.js
→
src/routes/api/s
ecurities/[security
([0-9]+)]/prices.js
View file @
2edafb02
...
@@ -3,7 +3,7 @@ import oracledb from "oracledb"
...
@@ -3,7 +3,7 @@ import oracledb from "oracledb"
import
{
pool
}
from
"
../../../../database
"
import
{
pool
}
from
"
../../../../database
"
export
async
function
get
(
req
,
res
)
{
export
async
function
get
(
req
,
res
)
{
const
{
s
tock
:
stock
Id
}
=
req
.
params
const
{
s
ecurity
:
security
Id
}
=
req
.
params
const
connection
=
await
pool
.
getConnection
()
const
connection
=
await
pool
.
getConnection
()
let
result
=
null
let
result
=
null
...
@@ -68,11 +68,11 @@ export async function get(req, res) {
...
@@ -68,11 +68,11 @@ export async function get(req, res) {
(case when extract(day from np.day) < 10 or extract(day from np.day) > 20
(case when extract(day from np.day) < 10 or extract(day from np.day) > 20
then decode(np.setdate, 13, np.max) END) as Max_LiqFin1
then decode(np.setdate, 13, np.max) END) as Max_LiqFin1
from notation_price np
from notation_price np
where np.notation in (select id from notation where stock = :s
tock
Id)
where np.notation in (select id from notation where stock = :s
ecurity
Id)
and np.market = 1
and np.market = 1
) c ON (cd.exact_date = c.day)
) c ON (cd.exact_date = c.day)
where nvl(cd.exact_date, c.day) >= (select min(startdate) from notation where stock = :s
tock
Id)
where nvl(cd.exact_date, c.day) >= (select min(startdate) from notation where stock = :s
ecurity
Id)
and nvl(cd.exact_date, c.day) <= (select max(enddate) from notation where stock = :s
tock
Id)
and nvl(cd.exact_date, c.day) <= (select max(enddate) from notation where stock = :s
ecurity
Id)
)
)
group by notation, day
group by notation, day
) terme
) terme
...
@@ -98,10 +98,10 @@ export async function get(req, res) {
...
@@ -98,10 +98,10 @@ export async function get(req, res) {
select nep.day, nep.notation,
select nep.day, nep.notation,
first_value(nep.price)
first_value(nep.price)
over (partition by nep.day, nep.notation order by nep.id desc) as dernier_prix_comptant
over (partition by nep.day, nep.notation order by nep.id desc) as dernier_prix_comptant
from notation_extra_price nep where nep.notation in (select id from notation where stock = :s
tock
Id)
from notation_extra_price nep where nep.notation in (select id from notation where stock = :s
ecurity
Id)
) a ON (cd.exact_date = a.day)
) a ON (cd.exact_date = a.day)
where nvl(cd.exact_date, a.day) >= (select min(startdate) from notation where stock = :s
tock
Id)
where nvl(cd.exact_date, a.day) >= (select min(startdate) from notation where stock = :s
ecurity
Id)
and nvl(cd.exact_date, a.day) <= (select max(enddate) from notation where stock = :s
tock
Id)
and nvl(cd.exact_date, a.day) <= (select max(enddate) from notation where stock = :s
ecurity
Id)
)
)
) pnep
) pnep
full outer join
full outer join
...
@@ -115,11 +115,11 @@ export async function get(req, res) {
...
@@ -115,11 +115,11 @@ export async function get(req, res) {
(
(
select np.day, np.notation, nvl(np.price_yesterday, np.previous) as dernier_prix_comptant
select np.day, np.notation, nvl(np.price_yesterday, np.previous) as dernier_prix_comptant
from notation_price np
from notation_price np
where np.notation in (select id from notation where stock = :s
tock
Id)
where np.notation in (select id from notation where stock = :s
ecurity
Id)
and np.market = 2
and np.market = 2
) b ON (cd.exact_date = b.day)
) b ON (cd.exact_date = b.day)
where nvl(cd.exact_date, b.day) >= (select min(startdate) from notation where stock = :s
tock
Id)
where nvl(cd.exact_date, b.day) >= (select min(startdate) from notation where stock = :s
ecurity
Id)
and nvl(cd.exact_date, b.day) <= (select max(enddate) from notation where stock = :s
tock
Id)
and nvl(cd.exact_date, b.day) <= (select max(enddate) from notation where stock = :s
ecurity
Id)
)
)
) pnp
) pnp
ON (pnep.notation = pnp.notation and pnep.day = pnp.day)
ON (pnep.notation = pnp.notation and pnep.day = pnp.day)
...
@@ -128,7 +128,7 @@ export async function get(req, res) {
...
@@ -128,7 +128,7 @@ export async function get(req, res) {
order by comptant.day
order by comptant.day
`
,
`
,
{
{
s
tock
Id
:
{
dir
:
oracledb
.
BIND_IN
,
val
:
s
tock
Id
,
type
:
oracledb
.
STRING
},
s
ecurity
Id
:
{
dir
:
oracledb
.
BIND_IN
,
val
:
s
ecurity
Id
,
type
:
oracledb
.
STRING
},
}
}
)
)
}
catch
(
error
)
{
}
catch
(
error
)
{
...
...
src/routes/api/static/s
tocks/[stock
([0-9]+)].js
→
src/routes/api/static/s
ecurities/[security
([0-9]+)].js
View file @
2edafb02
...
@@ -4,9 +4,9 @@ import path from "path"
...
@@ -4,9 +4,9 @@ import path from "path"
import
serverConfig
from
"
../../../../server-config
"
import
serverConfig
from
"
../../../../server-config
"
export
function
get
(
req
,
res
)
{
export
function
get
(
req
,
res
)
{
const
{
s
tock
:
stock
Id
}
=
req
.
params
const
{
s
ecurity
:
security
Id
}
=
req
.
params
const
s
tock
FilePath
=
path
.
join
(
serverConfig
.
dataDir
,
"
s
tocks
"
,
`stock_
${
stock
Id
}
.json`
)
const
s
ecurity
FilePath
=
path
.
join
(
serverConfig
.
dataDir
,
"
s
ecurities
"
,
`security_
${
security
Id
}
.json`
)
if
(
!
fs
.
existsSync
(
s
tock
FilePath
))
{
if
(
!
fs
.
existsSync
(
s
ecurity
FilePath
))
{
res
.
writeHead
(
404
,
{
res
.
writeHead
(
404
,
{
"
Content-Type
"
:
"
application/json
"
,
"
Content-Type
"
:
"
application/json
"
,
})
})
...
@@ -15,7 +15,7 @@ export function get(req, res) {
...
@@ -15,7 +15,7 @@ export function get(req, res) {
{
{
error
:
{
error
:
{
code
:
404
,
code
:
404
,
message
:
`S
tock
${
stock
Id
}
doesn't exist.`
,
message
:
`S
ecurity
${
security
Id
}
doesn't exist.`
,
},
},
},
},
null
,
null
,
...
@@ -23,7 +23,7 @@ export function get(req, res) {
...
@@ -23,7 +23,7 @@ export function get(req, res) {
)
)
)
)
}
}
if
(
!
fs
.
lstatSync
(
s
tock
FilePath
).
isFile
())
{
if
(
!
fs
.
lstatSync
(
s
ecurity
FilePath
).
isFile
())
{
res
.
writeHead
(
404
,
{
res
.
writeHead
(
404
,
{
"
Content-Type
"
:
"
application/json
"
,
"
Content-Type
"
:
"
application/json
"
,
})
})
...
@@ -32,7 +32,7 @@ export function get(req, res) {
...
@@ -32,7 +32,7 @@ export function get(req, res) {
{
{
error
:
{
error
:
{
code
:
404
,
code
:
404
,
message
:
`S
tock
${
stock
Id
}
doesn't exist (not a file).`
,
message
:
`S
ecurity
${
security
Id
}
doesn't exist (not a file).`
,
},
},
},
},
null
,
null
,
...
@@ -43,5 +43,5 @@ export function get(req, res) {
...
@@ -43,5 +43,5 @@ export function get(req, res) {
res
.
writeHead
(
200
,
{
res
.
writeHead
(
200
,
{
"
Content-Type
"
:
"
application/json
"
,
"
Content-Type
"
:
"
application/json
"
,
})
})
res
.
end
(
fs
.
readFileSync
(
s
tock
FilePath
))
res
.
end
(
fs
.
readFileSync
(
s
ecurity
FilePath
))
}
}
src/routes/issuers/[issuer([0-9]+)]/_layout.html
View file @
2edafb02
...
@@ -28,10 +28,10 @@
...
@@ -28,10 +28,10 @@
{/if}
{/if}
</li>
</li>
<li
class=
"nav-item"
>
<li
class=
"nav-item"
>
{#if child.segment === "s
tock
s"}
{#if child.segment === "s
ecuritie
s"}
<a
class=
"nav-link active"
href=
"/issuers/{issuer.id}/s
tock
s"
rel=
"prefetch"
>
S
tock
s
<span
class=
"sr-only"
>
(current)
</span></a>
<a
class=
"nav-link active"
href=
"/issuers/{issuer.id}/s
ecuritie
s"
rel=
"prefetch"
>
S
ecuritie
s
<span
class=
"sr-only"
>
(current)
</span></a>
{:else}
{:else}
<a
class=
"nav-link"
href=
"/issuers/{issuer.id}/s
tock
s"
rel=
"prefetch"
>
S
tock
s
</a>
<a
class=
"nav-link"
href=
"/issuers/{issuer.id}/s
ecuritie
s"
rel=
"prefetch"
>
S
ecuritie
s
</a>
{/if}
{/if}
</li>
</li>
<li
class=
"nav-item"
>
<li
class=
"nav-item"
>
...
...
src/routes/issuers/[issuer([0-9]+)]/index.html
View file @
2edafb02
...
@@ -50,15 +50,15 @@
...
@@ -50,15 +50,15 @@
</div>
</div>
{/if}
{/if}
<!-- {#if issuer.s
tock
s}
<!-- {#if issuer.s
ecuritie
s}
<div class="card my-3">
<div class="card my-3">
<div class="card-header">
<div class="card-header">
<h3 class="mb-0">
<h3 class="mb-0">
<button class="btn btn-light" type="button">
<button class="btn btn-light" type="button">
{#if Object.keys(issuer.s
tock
s).length > 1}
{#if Object.keys(issuer.s
ecuritie
s).length > 1}
{Object.keys(issuer.s
tock
s).length} s
tock
s
{Object.keys(issuer.s
ecuritie
s).length} s
ecuritie
s
{:else}
{:else}
{Object.keys(issuer.s
tock
s).length} stock
{Object.keys(issuer.s
ecuritie
s).length} stock
{/if}
{/if}
</button>
</button>
</h3>
</h3>
...
...
src/routes/issuers/[issuer([0-9]+)]/securities.html
0 → 100644
View file @
2edafb02
<p
class=
"my-4 text-muted"
>
{#if Object.keys(issuer.securities).length > 1}
{Object.keys(issuer.securities).length} results
{:else}
{Object.keys(issuer.securities).length} result
{/if}
</p>
<div
class=
"list-group"
>
{#each Object.values(issuer.securities) as security (security.id)}
<a
class=
"list-group-item list-group-item-action"
href=
"/securities/{security.id}"
>
<div>
{(security.name || "Titre sans nom").toUpperCase()}
</div>
<div
class=
"text-muted"
>
{security.share_type.name}
</div>
<div
class=
"text-muted"
>
{[...new Set(security.types.map(securityType => securityType.name))].sort().join(", ")}
</div>
</a>
{/each}
</div>
src/routes/issuers/[issuer([0-9]+)]/stocks.html
deleted
100644 → 0
View file @
1d42f894
<p
class=
"my-4 text-muted"
>
{#if Object.keys(issuer.stocks).length > 1}
{Object.keys(issuer.stocks).length} results
{:else}
{Object.keys(issuer.stocks).length} result
{/if}
</p>
<div
class=
"list-group"
>
{#each Object.values(issuer.stocks) as stock (stock.id)}
<a
class=
"list-group-item list-group-item-action"
href=
"/stocks/{stock.id}"
>
<div>
{(stock.name || "Titre sans nom").toUpperCase()}
</div>
<div
class=
"text-muted"
>
{stock.share_type.name}
</div>
<div
class=
"text-muted"
>
{[...new Set(stock.types.map(stockType => stockType.name))].sort().join(", ")}
</div>
</a>
{/each}
</div>
src/routes/s
tocks/[stock
([0-9]+)]/_layout.html
→
src/routes/s
ecurities/[security
([0-9]+)]/_layout.html
View file @
2edafb02
<svelte:head>
<svelte:head>
<title>
{s
tock
.name} | S
tock
s | Eurhisfirm
</title>
<title>
{s
ecurity
.name} | S
ecuritie
s | Eurhisfirm
</title>
</svelte:head>
</svelte:head>
<main
class=
"container-fluid"
>
<main
class=
"container-fluid"
>
<h1>
<h1>
<span
class=
"text-muted"
>
S
tock
</span>
{s
tock
.name}
<span
class=
"text-muted"
>
S
ecurity
</span>
{s
ecurity
.name}
<small
class=
"text-muted"
>
<small
class=
"text-muted"
>
{s
tock
.share_type.name}
{s
ecurity
.share_type.name}
/
/
{[...new Set(s
tock
.types.map(s
tock
Type => s
tock
Type.name))].sort().join(", ")}
{[...new Set(s
ecurity
.types.map(s
ecurity
Type => s
ecurity
Type.name))].sort().join(", ")}
</small>
</small>
</h1>
</h1>
...
@@ -32,35 +32,35 @@
...
@@ -32,35 +32,35 @@
<ul
class=
"nav nav-tabs"
>
<ul
class=
"nav nav-tabs"
>
<li
class=
"nav-item"
>
<li
class=
"nav-item"
>
{#if child.segment === undefined}
{#if child.segment === undefined}
<a
class=
"nav-link active"
href=
"/s
tocks/{stock
.id}"
rel=
"prefetch"
>
Summary
<span
class=
"sr-only"
>
(current)
</span></a>
<a
class=
"nav-link active"
href=
"/s
ecurities/{security
.id}"
rel=
"prefetch"
>
Summary
<span
class=
"sr-only"
>
(current)
</span></a>
{:else}
{:else}
<a
class=
"nav-link"
href=
"/s
tocks/{stock
.id}"
rel=
"prefetch"
>
Summary
</a>
<a
class=
"nav-link"
href=
"/s
ecurities/{security
.id}"
rel=
"prefetch"
>
Summary
</a>
{/if}
{/if}
</li>
</li>
<li
class=
"nav-item"
>
<li
class=
"nav-item"
>
{#if child.segment === "dividends"}
{#if child.segment === "dividends"}
<a
class=
"nav-link active"
href=
"/s
tocks/{stock
.id}/dividends"
rel=
"prefetch"
>
Dividends
<span
class=
"sr-only"
>
(current)
</span></a>
<a
class=
"nav-link active"
href=
"/s
ecurities/{security
.id}/dividends"
rel=
"prefetch"
>
Dividends
<span
class=
"sr-only"
>
(current)
</span></a>
{:else}
{:else}
<a
class=
"nav-link"
href=
"/s
tocks/{stock
.id}/dividends"
rel=
"prefetch"
>
Dividends
</a>
<a
class=
"nav-link"
href=
"/s
ecurities/{security
.id}/dividends"
rel=
"prefetch"
>
Dividends
</a>
{/if}
{/if}
</li>
</li>
<li
class=
"nav-item"
>
<li
class=
"nav-item"
>
{#if child.segment === "prices"}
{#if child.segment === "prices"}
<a
class=
"nav-link active"
href=
"/s
tocks/{stock
.id}/prices"
rel=
"prefetch"
>
Prices
<span
class=
"sr-only"
>
(current)
</span></a>
<a
class=
"nav-link active"
href=
"/s
ecurities/{security
.id}/prices"
rel=
"prefetch"
>
Prices
<span
class=
"sr-only"
>
(current)
</span></a>
{:else}
{:else}
<a
class=
"nav-link"
href=
"/s
tocks/{stock
.id}/prices"
rel=
"prefetch"
>
Prices
</a>
<a
class=
"nav-link"
href=
"/s
ecurities/{security
.id}/prices"
rel=
"prefetch"
>
Prices
</a>
{/if}
{/if}
</li>
</li>
</ul>
</ul>
<svelte:component
this=
{child.component}
{...
child.props
}
{
s
tock
}
/>
<svelte:component
this=
{child.component}
{...
child.props
}
{
s
ecurity
}
/>
</main>
</main>
<script>
<script>
export
default
{
export
default
{
computed
:
{
computed
:
{
simplifiedIssuers
({
s
tock
})
{
simplifiedIssuers
({
s
ecurity
})
{
const
simplifiedIssuerByIdAndName
=
s
tock
.
issuers
.
reduce
((
accumulator
,
issuer
)
=>
{
const
simplifiedIssuerByIdAndName
=
s
ecurity
.
issuers
.
reduce
((
accumulator
,
issuer
)
=>
{
accumulator
[
`
${
issuer
.
name
}
${
issuer
.
id
}
`
]
=
{
accumulator
[
`
${
issuer
.
name
}
${
issuer
.
id
}
`
]
=
{
id
:
issuer
.
id
,
id
:
issuer
.
id
,
name
:
issuer
.
name
,
name
:
issuer
.
name
,
...
@@ -71,8 +71,8 @@
...
@@ -71,8 +71,8 @@
},
},
},
},
async
preload
({
params
/* , query */
})
{
async
preload
({
params
/* , query */
})
{
const
{
s
tock
:
stock
Id
}
=
params
const
{
s
ecurity
:
security
Id
}
=
params
const
response
=
await
this
.
fetch
(
`/api/static/s
tocks/
${
stock
Id
}
`
)
const
response
=
await
this
.
fetch
(
`/api/static/s
ecurities/
${
security
Id
}
`
)
const
result
=
const
result
=
response
.
ok
||
response
.
status
===
400
response
.
ok
||
response
.
status
===
400
?
await
response
.
json
()
?
await
response
.
json
()
...
@@ -80,7 +80,7 @@
...
@@ -80,7 +80,7 @@
if
(
result
.
error
)
{
if
(
result
.
error
)
{
return
this
.
error
(
result
.
error
.
code
,
result
.
error
.
message
)
return
this
.
error
(
result
.
error
.
code
,
result
.
error
.
message
)
}
}
return
{
s
tock
:
result
}
return
{
s
ecurity
:
result
}
},
},
}
}
</script>
</script>
\ No newline at end of file
src/routes/s
tocks/[stock
([0-9]+)]/dividends.html
→
src/routes/s
ecurities/[security
([0-9]+)]/dividends.html
View file @
2edafb02
<svelte:head>
<svelte:head>
<title>
Dividends | {s
tock
.name} | S
tock
s | Eurhisfirm
</title>
<title>
Dividends | {s
ecurity
.name} | S
ecuritie
s | Eurhisfirm
</title>
</svelte:head>
</svelte:head>
TODO
TODO
src/routes/s
tocks/[stock
([0-9]+)]/index.html
→
src/routes/s
ecurities/[security
([0-9]+)]/index.html
View file @
2edafb02
{#each Object.values(s
tock
.stock_exchanges || {}).sort(stockExchange => stockExchange.name) as stockExchange (`stock_exchange_${stockExchange.id}`)}
{#each Object.values(s
ecurity
.stock_exchanges || {}).sort(stockExchange => stockExchange.name) as stockExchange (`stock_exchange_${stockExchange.id}`)}
<div
class=
"card my-3"
>
<div
class=
"card my-3"
>
<div
class=
"card-header"
>
<div
class=
"card-header"
>
Listed on
<i>
{stockExchange.name}
</i>
Listed on
<i>
{stockExchange.name}
</i>
...
...
src/routes/s
tocks/[stock
([0-9]+)]/prices-plotly.html
→
src/routes/s
ecurities/[security
([0-9]+)]/prices-plotly.html
View file @
2edafb02
<svelte:head>
<svelte:head>
<title>
Prices | {s
tock
.name} | S
tock
s | Eurhisfirm
</title>
<title>
Prices | {s
ecurity
.name} | S
ecuritie
s | Eurhisfirm
</title>
</svelte:head>
</svelte:head>
<svelte:window
on:resize=
"resize()"
/>
<svelte:window
on:resize=
"resize()"
/>
...
@@ -112,8 +112,8 @@
...
@@ -112,8 +112,8 @@
)
)
},
},
async
preload
({
params
/* query */
})
{
async
preload
({
params
/* query */
})
{
const
{
s
tock
:
stock
Id
}
=
params
const
{
s
ecurity
:
security
Id
}
=
params
const
response
=
await
this
.
fetch
(
`/api/s
tocks/
${
stock
Id
}
/prices`
)
const
response
=
await
this
.
fetch
(
`/api/s
ecurities/
${
security
Id
}
/prices`
)
const
result
=
const
result
=
response
.
ok
||
response
.
status
===
400
response
.
ok
||
response
.
status
===
400
?
await
response
.
json
()
?
await
response
.
json
()
...
...
src/routes/s
tocks/[stock
([0-9]+)]/prices.html
→
src/routes/s
ecurities/[security
([0-9]+)]/prices.html
View file @
2edafb02
<svelte:head>
<svelte:head>
<title>
Prices | {s
tock
.name} | S
tock
s | Eurhisfirm
</title>
<title>
Prices | {s
ecurity
.name} | S
ecuritie
s | Eurhisfirm
</title>
</svelte:head>
</svelte:head>
<div
id=
"container"
style=
"height:800px; width:100%;"
></div>
<div
id=
"container"
style=
"height:800px; width:100%;"
></div>
...
@@ -112,8 +112,8 @@
...
@@ -112,8 +112,8 @@
})
})
},
},
async
preload
({
params
/* query */
})
{
async
preload
({
params
/* query */
})
{
const
{
s
tock
:
stock
Id
}
=
params
const
{
s
ecurity
:
security
Id
}
=
params
const
response
=
await
this
.
fetch
(
`/api/s
tocks/
${
stock
Id
}
/prices`
)
const
response
=
await
this
.
fetch
(
`/api/s
ecurities/
${
security
Id
}
/prices`
)
const
result
=
const
result
=
response
.
ok
||
response
.
status
===
400
response
.
ok
||
response
.
status
===
400
?
await
response
.
json
()
?
await
response
.
json
()
...
...
src/scripts/generate-s
tock
s.js
→
src/scripts/generate-s
ecuritie
s.js
View file @
2edafb02
...
@@ -10,7 +10,7 @@ import { cleanUpLine, objectsFromSqlResult } from "../model"
...
@@ -10,7 +10,7 @@ import { cleanUpLine, objectsFromSqlResult } from "../model"
const
dataDir
=
"
data
"
const
dataDir
=
"
data
"
let
pool
=
null
let
pool
=
null
async
function
generateS
tock
s
()
{
async
function
generateS
ecuritie
s
()
{
const
connection
=
await
pool
.
getConnection
()
const
connection
=
await
pool
.
getConnection
()
try
{
try
{
console
.
log
(
"
Reading stock exchanges...
"
)
console
.
log
(
"
Reading stock exchanges...
"
)
...
@@ -44,8 +44,8 @@ async function generateStocks() {
...
@@ -44,8 +44,8 @@ async function generateStocks() {
}
}
}
}
console
.
log
(
"
Loading s
tock
types...
"
)
console
.
log
(
"
Loading s
ecurity
types...
"
)
const
s
tock
TypeById
=
{}
const
s
ecurity
TypeById
=
{}
{
{
const
entries
=
objectsFromSqlResult
(
const
entries
=
objectsFromSqlResult
(
await
connection
.
execute
(
await
connection
.
execute
(
...
@@ -59,22 +59,22 @@ async function generateStocks() {
...
@@ -59,22 +59,22 @@ async function generateStocks() {
)
)
)
)
for
(
let
entry
of
entries
)
{
for
(
let
entry
of
entries
)
{
s
tock
TypeById
[
entry
.
id
]
=
entry
s
ecurity
TypeById
[
entry
.
id
]
=
entry
}
}
}
}
const
s
tock
sDir
=
path
.
join
(
dataDir
,
"
s
tock
s
"
)
const
s
ecuritie
sDir
=
path
.
join
(
dataDir
,
"
s
ecuritie
s
"
)
if
(
!
fs
.
existsSync
(
s
tock
sDir
))
{
if
(
!
fs
.
existsSync
(
s
ecuritie
sDir
))
{
fs
.
mkdirSync
(
s
tock
sDir
)
fs
.
mkdirSync
(
s
ecuritie
sDir
)
}
}
const
existingS
tock
sFilenames
=
new
Set
(
const
existingS
ecuritie
sFilenames
=
new
Set
(
fs
.
readdirSync
(
s
tock
sDir
).
filter
(
filename
=>
/^s
tock
_
[
0-9
]
+
\.
json$/
.
test
(
filename
))
fs
.
readdirSync
(
s
ecuritie
sDir
).
filter
(
filename
=>
/^s
ecurity
_
[
0-9
]
+
\.
json$/
.
test
(
filename
))
)
)
console
.
log
(
"
Loading s
tock
s...
"
)
console
.
log
(
"
Loading s
ecuritie
s...
"
)
const
issuersDir
=
path
.
join
(
dataDir
,
"
issuers
"
)
const
issuersDir
=
path
.
join
(
dataDir
,
"
issuers
"
)
assert
(
fs
.
existsSync
(
issuersDir
),
`Issuers directory not found:
${
issuersDir
}
`
)
assert
(
fs
.
existsSync
(
issuersDir
),
`Issuers directory not found:
${
issuersDir
}
`
)
const
s
tock
s
=
objectsFromSqlResult
(
const
s
ecuritie
s
=
objectsFromSqlResult
(
await
connection
.
execute
(
await
connection
.
execute
(
`
`
select
select
...
@@ -85,18 +85,19 @@ async function generateStocks() {
...
@@ -85,18 +85,19 @@ async function generateStocks() {
`
`
)
)
)
)
const
s
tock
sIds
=
new
Set
()
const
s
ecuritie
sIds
=
new
Set
()
const
summaryByIssuerId
=
{}
const
summaryByIssuerId
=
{}
for
(
let
s
tock
of
stock
s
)
{
for
(
let
s
ecurity
of
securitie
s
)
{
// console.log(`Loading s
tock ${stock
.id}...`)
// console.log(`Loading s
ecurity ${security
.id}...`)
s
tock
sIds
.
add
(
s
tock
.
id
)
s
ecuritie
sIds
.
add
(
s
ecurity
.
id
)
stock
.
share_type
=
shareTypeById
[
stock
.
sharetype
]
security
.
share_type
=
shareTypeById
[
security
.
sharetype
]
assert
(
stock
.
share_type
!==
undefined
,
`Unknown share type "
${
stock
.
share_type
}
" for stock
${
stock
.
id
}
`
)
assert
(
security
.
share_type
!==
undefined
,
`Unknown share type "
${
security
.
share_type
}
" for security
${
delete
stock
.
sharetype
security
.
id
}
`
)
delete
security
.
sharetype
{
{
// Add issuers to s
tock
.
// Add issuers to s
ecurity
.
const
entries
=
objectsFromSqlResult
(
const
entries
=
objectsFromSqlResult
(
await
connection
.
execute
(
await
connection
.
execute
(
`
`
...
@@ -105,14 +106,14 @@ async function generateStocks() {
...
@@ -105,14 +106,14 @@ async function generateStocks() {
to_char(sc.startdate, 'YYYY-MM-DD') as start_date,
to_char(sc.startdate, 'YYYY-MM-DD') as start_date,
to_char(sc.enddate, 'YYYY-MM-DD') as end_date
to_char(sc.enddate, 'YYYY-MM-DD') as end_date
from stock_corporation sc
from stock_corporation sc
where sc.stock = :s
tock
Id
where sc.stock = :s
ecurity
Id
`
,
`
,
{
{
s
tock
Id
:
{
dir
:
oracledb
.
BIND_IN
,
val
:
s
tock
.
id
,
type
:
oracledb
.
INTEGER
},
s
ecurity
Id
:
{
dir
:
oracledb
.
BIND_IN
,
val
:
s
ecurity
.
id
,
type
:
oracledb
.
INTEGER
},
}
}
)
)
)
)
s
tock
.
issuers
=
entries
s
ecurity
.
issuers
=
entries
.
map
(
entry
=>
{
.
map
(
entry
=>
{
const
issuerFilePath
=
path
.
join
(
issuersDir
,
`issuer_
${
entry
.
issuer_id
}
.json`
)