aboutsummaryrefslogtreecommitdiff
path: root/doc/import/README.md
blob: 50ef74b44db24a949751ebc8e9c8054245b01e4f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<!--
SPDX-FileCopyrightText: 2020 IN COMMON Collective <collective@incommon.cc>

SPDX-License-Identifier: CC-BY-SA-4.0
-->

## Parsing Resources

The script `parser.rb` creates a file named `Locations.geojson`, which contains
all the points from the ConcertES and Dewey Maps databases. It parses the .csv
files from the Concertes folder and the .json files from the Dewey folder. To
run it: `ruby parser.rb`

The main files it uses are:

- `Concertes/20200312_EntreprisesSignaletique.csv` which contains the name of
   the points from the Concertes data
- `Concertes/20200312_EntreprisesCoordonnees.csv` which contains the coordinates
   of the points from the Concertes data and
- `Dewey/dewey-maps-markers.json` which contains the data of the points from the
   Dewey data

## Importing to Database

Once you have `Locations.geojson`, connect to the Rails console:

```ruby
# Load the GeoJSON into an Array
locs = JSON.parse(IO.read('doc/import/Locations.geojson'))
# Get related Agent records. You must have run `rails db:seed` beforehand.
dewey = Agent.find_by(name: 'Dewey')
concertes = Agent.find_by(name: 'ConcertES')
# Create Resource records
locs['features'].each do |f|
  agent = f['properties']['source'] == dewey['name'] ? dewey : concertes
  Resource.create(agent_id: agent.id, feature: f)
end
```
### Importing categories

We have a JSON file in French for categories in `doc/import/categories-fr.json`.

From the console:

```ruby
if Category.count == 0
  dewey_taxo = Taxonomy.first
  cats = JSON.parse(IO.read('doc/import/categories-fr.json'))
  cats.each do |cat|
    c = Category.create(name: cat['name'], dewey_id: cat['id'], taxonomy_id: dewey_taxo.id, color: cat['color'])
    cat['sections'].each do |sec|
      Section.create(name: sec['name'], category_id: c.id, dewey_id: sec['id'], color: sec['color'])
    end
  end
  # Now that we have all we need, update resources_sections...
  Resource.all.each do |res|
    sec_ids = res.feature['properties']['categories']
    next if sec_ids.empty?
    sec_ids.each do |id|
      s = Section.find_by(dewey_id: id)
      res.sections << s if s.present?
      res.save
    end
  end
end
```

It's taken into account in `rails db:seed`


### Cleaning up records

Some records need cleanup...

#### Category names

Remove prepended numbers from names:
`Category.all.each { |c| c.update(name: c.name.sub(/^\d. /,'')) if c.name =~ /^\d/ }`

#### Category colors

Match category rank with style color:
```ruby
cat_colors = ['#BCBCBC', '#95a5a6', '#848482', '#948279', '#59706a', '#16a085', '#27ae60', '#2980b9', '#34495e', '#bd3525', '#d35400', '#eead0e']

Category.all.each { |c| c.update!(color: cat_colors.shift) }
```