{"action":"opened","issue":{"url":"https://api.github.com/repos/Rsl1122/Plan-PlayerAnalytics/issues/777","repository_url":"https://api.github.com/repos/Rsl1122/Plan-PlayerAnalytics","labels_url":"https://api.github.com/repos/Rsl1122/Plan-PlayerAnalytics/issues/777/labels{/name}","comments_url":"https://api.github.com/repos/Rsl1122/Plan-PlayerAnalytics/issues/777/comments","events_url":"https://api.github.com/repos/Rsl1122/Plan-PlayerAnalytics/issues/777/events","html_url":"https://github.com/Rsl1122/Plan-PlayerAnalytics/issues/777","id":377077791,"node_id":"MDU6SXNzdWUzNzcwNzc3OTE=","number":777,"title":"Configuration enhancements","user":{"login":"Rsl1122","id":24460436,"node_id":"MDQ6VXNlcjI0NDYwNDM2","avatar_url":"https://avatars0.githubusercontent.com/u/24460436?v=4","gravatar_id":"","url":"https://api.github.com/users/Rsl1122","html_url":"https://github.com/Rsl1122","followers_url":"https://api.github.com/users/Rsl1122/followers","following_url":"https://api.github.com/users/Rsl1122/following{/other_user}","gists_url":"https://api.github.com/users/Rsl1122/gists{/gist_id}","starred_url":"https://api.github.com/users/Rsl1122/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Rsl1122/subscriptions","organizations_url":"https://api.github.com/users/Rsl1122/orgs","repos_url":"https://api.github.com/users/Rsl1122/repos","events_url":"https://api.github.com/users/Rsl1122/events{/privacy}","received_events_url":"https://api.github.com/users/Rsl1122/received_events","type":"User","site_admin":false},"labels":[{"id":497149514,"node_id":"MDU6TGFiZWw0OTcxNDk1MTQ=","url":"https://api.github.com/repos/Rsl1122/Plan-PlayerAnalytics/labels/Enhancement","name":"Enhancement","color":"0e8a16","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2018-11-03T17:55:12Z","updated_at":"2018-11-03T17:55:12Z","closed_at":null,"author_association":"OWNER","body":"### Is your feature request related to a problem? Please describe.\r\n<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->\r\n\r\nCurrent configuration system is very rigid and \"only gets the job done\" for the most part.\r\n\r\nOver the lifetime of the project, many feature requests and bug fixes have made the configuration file unintuitive, inconsistent and full of very specific details without enough information about what the setting actually affects.\r\n\r\n### Describe the solution you'd like\r\n<!-- A clear and concise description of what you want to happen. -->\r\n\r\n#### Patching\r\n\r\nI would like a configuration patch system similar to the patch system of the database.\r\n\r\nThis would allow changing the configuration to better formats without causing users having to rewrite their config every update.\r\n\r\nRequired features of configuration patching:\r\n- Add a new configuration node\r\n- Move an old configuration node to another path (Also includes renaming)\r\n- Remove an old configuration node\r\n\r\n#### Validation\r\n\r\nWith the move from a hard coded enum to an interface for setting nodes, it is now possible to add more features that having all settings in an enum did not support.\r\nThis includes adding a validation step to fetching config settings.\r\n\r\nImplementation details:\r\n- Create some validator that gives default values and add it to Setting, possibly generics too.\r\n- Move different type settings to different enums by return type, or create a object for setting paths similar to `Key` implementations.\r\n- Add validity check to `PlanConfig`\r\n\r\n### Describe alternatives you've considered\r\n<!-- A clear and concise description of any alternative solutions or features you've considered. -->\r\n\r\nKeep current system, if it ain't broken don't fix it.\r\nThis will keep building more confusion."}}
{"actor":{"display_login":"Rsl1122"}}